ni: intro of frontier files between nit code and extern code
[nit.git] / c_src / parser_prod._sep.c
index 42d45ce..6993e90 100644 (file)
@@ -9259,6 +9259,8 @@ void parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* init_table){
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1735 */
+  CALL_parser_nodes___AInitPropdef___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos49] = 1;
   return;
@@ -9944,33 +9946,835 @@ void parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1){
   stack_frame_head = fra.me.prev;
   return;
 }
+void parser_prod___AExternInitPropdef___empty_init(val_t p0, int* init_table){
+  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternInitPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos51]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1866;
+  fra.me.meth = LOCATE_parser_prod___AExternInitPropdef___empty_init;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 1;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  /* ./parser//parser_prod.nit:1866 */
+  CALL_parser_nodes___AInitPropdef___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  stack_frame_head = fra.me.prev;
+  init_table[itpos51] = 1;
+  return;
+}
+void parser_prod___AExternInitPropdef___init_aexterninitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternInitPropdef].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[itpos52]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1868;
+  fra.me.meth = LOCATE_parser_prod___AExternInitPropdef___init_aexterninitpropdef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  fra.me.REG[7] = p7;
+  fra.me.REG[8] = p8;
+  /* ./parser//parser_prod.nit:1879 */
+  CALL_parser_prod___AExternInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1880 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1881 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1882 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1882);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1884 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1885 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1886 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1886);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1888 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1888);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1889 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1889);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1890 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1890);
+  }
+  ATTR_parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1891 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1891);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1892 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1893 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1894 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1894);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1896 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1896);
+  }
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1897 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1897);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1898 */
+  ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:1899 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1900 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1900);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:1902 */
+  ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[8];
+  /* ./parser//parser_prod.nit:1903 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1904 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1904);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  init_table[itpos52] = 1;
+  return;
+}
+void 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;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1908;
+  fra.me.meth = LOCATE_parser_prod___AExternInitPropdef___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 4;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:1910 */
+  fra.me.REG[3] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1911 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1912 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1912);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1913 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1913);
+      }
+      /* ./parser//parser_prod.nit:1914 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1916 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1918 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1920 */
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1921 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1922 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1922);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1923 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1923);
+      }
+      /* ./parser//parser_prod.nit:1924 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1926 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1928 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1930 */
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1931 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1932 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1932);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1933 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1933);
+      }
+      /* ./parser//parser_prod.nit:1934 */
+      ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1936 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1936);
+    }
+    /* ./parser//parser_prod.nit:1938 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1940 */
+  REGB0 = TAG_Bool(ATTR_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_prod, 1940);
+  }
+  fra.me.REG[3] = ATTR_parser_nodes___AExternInitPropdef____n_kwnew(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_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:1941 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1942 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1942);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1943 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnew, ID_TKwnew)) /*cast TKwnew*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1943);
+      }
+      /* ./parser//parser_prod.nit:1944 */
+      ATTR_parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1946 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1946);
+    }
+    /* ./parser//parser_prod.nit:1948 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1950 */
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1951 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1952 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1952);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1953 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1953);
+      }
+      /* ./parser//parser_prod.nit:1954 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1956 */
+      ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1958 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1960 */
+  fra.me.REG[3] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1961 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1962 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1962);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1963 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1963);
+      }
+      /* ./parser//parser_prod.nit:1964 */
+      ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1966 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1966);
+    }
+    /* ./parser//parser_prod.nit:1968 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1970 */
+  fra.me.REG[3] = ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1971 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1972 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1972);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1973 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1973);
+      }
+      /* ./parser//parser_prod.nit:1974 */
+      ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1976 */
+      ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1978 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1980 */
+  fra.me.REG[3] = ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1981 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
+      } else {
+        REGB1 = CALL_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:1982 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1982);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1983 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExternCalls, ID_AExternCalls)) /*cast AExternCalls*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1983);
+      }
+      /* ./parser//parser_prod.nit:1984 */
+      ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1986 */
+      ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1988 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternInitPropdef___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1992;
+  fra.me.meth = LOCATE_parser_prod___AExternInitPropdef___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:1994 */
+  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1995 */
+    fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1995);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:1997 */
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:1998 */
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1998);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:2000 */
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:2001 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser_prod, 2001);
+  }
+  fra.me.REG[2] = ATTR_parser_nodes___AExternInitPropdef____n_kwnew(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:2002 */
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:2003 */
+    fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2003);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:2005 */
+  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
+  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:2006 */
+  fra.me.REG[2] = ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:2007 */
+    fra.me.REG[2] = ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2007);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:2009 */
+  fra.me.REG[2] = ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_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:2010 */
+    fra.me.REG[0] = ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExternCalls, ID_AExternCalls)) /*cast AExternCalls*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2010);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  }
+  stack_frame_head = fra.me.prev;
+  return;
+}
 void parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
+  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos51]) return;
+  if (init_table[itpos53]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1866;
+  fra.me.line = 2015;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 1;
+  init_table[itpos53] = 1;
   return;
 }
 void parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
+  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_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[itpos52]) return;
+  if (init_table[itpos54]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1868;
+  fra.me.line = 2017;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -9980,11 +10784,11 @@ void parser_prod___AMainMethPropdef___init_amainmethpropdef(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:1873 */
+  /* ./parser//parser_prod.nit:2022 */
   CALL_parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1874 */
+  /* ./parser//parser_prod.nit:2023 */
   ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1875 */
+  /* ./parser//parser_prod.nit:2024 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -9999,16 +10803,16 @@ void parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1876 */
+    /* ./parser//parser_prod.nit:2025 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1876);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2025);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1878 */
+  /* ./parser//parser_prod.nit:2027 */
   ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1879 */
+  /* ./parser//parser_prod.nit:2028 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10023,15 +10827,15 @@ void parser_prod___AMainMethPropdef___init_amainmethpropdef(val_t p0, val_t p1,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1880 */
+    /* ./parser//parser_prod.nit:2029 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1880);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2029);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos52] = 1;
+  init_table[itpos54] = 1;
   return;
 }
 void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -10041,7 +10845,7 @@ void parser_prod___AMainMethPropdef___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_prod;
-  fra.me.line = 1884;
+  fra.me.line = 2033;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10052,7 +10856,7 @@ void parser_prod___AMainMethPropdef___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:1886 */
+  /* ./parser//parser_prod.nit:2035 */
   fra.me.REG[3] = ATTR_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)) {
@@ -10067,7 +10871,7 @@ void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1887 */
+    /* ./parser//parser_prod.nit:2036 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10082,28 +10886,28 @@ void parser_prod___AMainMethPropdef___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:1888 */
+      /* ./parser//parser_prod.nit:2037 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1888);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2037);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1889 */
+      /* ./parser//parser_prod.nit:2038 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1889);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2038);
       }
-      /* ./parser//parser_prod.nit:1890 */
+      /* ./parser//parser_prod.nit:2039 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1892 */
+      /* ./parser//parser_prod.nit:2041 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1894 */
+    /* ./parser//parser_prod.nit:2043 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1896 */
+  /* ./parser//parser_prod.nit:2045 */
   fra.me.REG[3] = ATTR_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)) {
@@ -10118,7 +10922,7 @@ void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1897 */
+    /* ./parser//parser_prod.nit:2046 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10133,25 +10937,25 @@ void parser_prod___AMainMethPropdef___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:1898 */
+      /* ./parser//parser_prod.nit:2047 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1898);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2047);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1899 */
+      /* ./parser//parser_prod.nit:2048 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1899);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2048);
       }
-      /* ./parser//parser_prod.nit:1900 */
+      /* ./parser//parser_prod.nit:2049 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1902 */
+      /* ./parser//parser_prod.nit:2051 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1904 */
+    /* ./parser//parser_prod.nit:2053 */
     goto label1;
   }
   label1: while(0);
@@ -10165,7 +10969,7 @@ void 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_prod;
-  fra.me.line = 1908;
+  fra.me.line = 2057;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -10174,7 +10978,7 @@ void parser_prod___AMainMethPropdef___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:1910 */
+  /* ./parser//parser_prod.nit:2059 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10190,16 +10994,16 @@ void 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:1911 */
+    /* ./parser//parser_prod.nit:2060 */
     fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1911);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2060);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:1913 */
+  /* ./parser//parser_prod.nit:2062 */
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10215,12 +11019,12 @@ void 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:1914 */
+    /* ./parser//parser_prod.nit:2063 */
     fra.me.REG[0] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1914);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2063);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -10228,32 +11032,32 @@ void parser_prod___AMainMethPropdef___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table){
-  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos53]) return;
+  if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1919;
+  fra.me.line = 2068;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
+  init_table[itpos55] = 1;
   return;
 }
 void parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
-  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].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[itpos54]) return;
+  if (init_table[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1921;
+  fra.me.line = 2070;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -10271,11 +11075,11 @@ void parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:1930 */
+  /* ./parser//parser_prod.nit:2079 */
   CALL_parser_prod___ATypePropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1931 */
+  /* ./parser//parser_prod.nit:2080 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1932 */
+  /* ./parser//parser_prod.nit:2081 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10290,16 +11094,16 @@ void parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1933 */
+    /* ./parser//parser_prod.nit:2082 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1933);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2082);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1935 */
+  /* ./parser//parser_prod.nit:2084 */
   ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:1936 */
+  /* ./parser//parser_prod.nit:2085 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10314,67 +11118,67 @@ void parser_prod___ATypePropdef___init_atypepropdef(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1937 */
+    /* ./parser//parser_prod.nit:2086 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1937);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2086);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1939 */
+  /* ./parser//parser_prod.nit:2088 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1939);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2088);
   }
   ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:1940 */
+  /* ./parser//parser_prod.nit:2089 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1940);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2089);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1941 */
+  /* ./parser//parser_prod.nit:2090 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1941);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2090);
   }
   ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:1942 */
+  /* ./parser//parser_prod.nit:2091 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1942);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2091);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1943 */
+  /* ./parser//parser_prod.nit:2092 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1943);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2092);
   }
   ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:1944 */
+  /* ./parser//parser_prod.nit:2093 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1944);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2093);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1945 */
+  /* ./parser//parser_prod.nit:2094 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1945);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2094);
   }
   ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:1946 */
+  /* ./parser//parser_prod.nit:2095 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1946);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2095);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos54] = 1;
+  init_table[itpos56] = 1;
   return;
 }
 void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -10384,7 +11188,7 @@ void parser_prod___ATypePropdef___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_prod;
-  fra.me.line = 1949;
+  fra.me.line = 2098;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10395,7 +11199,7 @@ void parser_prod___ATypePropdef___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:1951 */
+  /* ./parser//parser_prod.nit:2100 */
   fra.me.REG[3] = ATTR_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)) {
@@ -10410,7 +11214,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1952 */
+    /* ./parser//parser_prod.nit:2101 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10425,28 +11229,28 @@ void parser_prod___ATypePropdef___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:1953 */
+      /* ./parser//parser_prod.nit:2102 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1953);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2102);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1954 */
+      /* ./parser//parser_prod.nit:2103 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1954);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2103);
       }
-      /* ./parser//parser_prod.nit:1955 */
+      /* ./parser//parser_prod.nit:2104 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1957 */
+      /* ./parser//parser_prod.nit:2106 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1959 */
+    /* ./parser//parser_prod.nit:2108 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1961 */
+  /* ./parser//parser_prod.nit:2110 */
   fra.me.REG[3] = ATTR_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)) {
@@ -10461,7 +11265,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1962 */
+    /* ./parser//parser_prod.nit:2111 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10476,32 +11280,32 @@ void parser_prod___ATypePropdef___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:1963 */
+      /* ./parser//parser_prod.nit:2112 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1963);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2112);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1964 */
+      /* ./parser//parser_prod.nit:2113 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1964);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2113);
       }
-      /* ./parser//parser_prod.nit:1965 */
+      /* ./parser//parser_prod.nit:2114 */
       ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1967 */
+      /* ./parser//parser_prod.nit:2116 */
       ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1969 */
+    /* ./parser//parser_prod.nit:2118 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1971 */
+  /* ./parser//parser_prod.nit:2120 */
   REGB0 = TAG_Bool(ATTR_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_prod, 1971);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 2120);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10511,7 +11315,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1972 */
+    /* ./parser//parser_prod.nit:2121 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10526,32 +11330,32 @@ void parser_prod___ATypePropdef___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:1973 */
+      /* ./parser//parser_prod.nit:2122 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1973);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2122);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1974 */
+      /* ./parser//parser_prod.nit:2123 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1974);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2123);
       }
-      /* ./parser//parser_prod.nit:1975 */
+      /* ./parser//parser_prod.nit:2124 */
       ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1977 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1977);
+      /* ./parser//parser_prod.nit:2126 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2126);
     }
-    /* ./parser//parser_prod.nit:1979 */
+    /* ./parser//parser_prod.nit:2128 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1981 */
+  /* ./parser//parser_prod.nit:2130 */
   REGB0 = TAG_Bool(ATTR_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_prod, 1981);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser_prod, 2130);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10561,7 +11365,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1982 */
+    /* ./parser//parser_prod.nit:2131 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10576,32 +11380,32 @@ void parser_prod___ATypePropdef___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:1983 */
+      /* ./parser//parser_prod.nit:2132 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1983);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2132);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1984 */
+      /* ./parser//parser_prod.nit:2133 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtype, ID_TKwtype)) /*cast TKwtype*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1984);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2133);
       }
-      /* ./parser//parser_prod.nit:1985 */
+      /* ./parser//parser_prod.nit:2134 */
       ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1987 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1987);
+      /* ./parser//parser_prod.nit:2136 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2136);
     }
-    /* ./parser//parser_prod.nit:1989 */
+    /* ./parser//parser_prod.nit:2138 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:1991 */
+  /* ./parser//parser_prod.nit:2140 */
   REGB0 = TAG_Bool(ATTR_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_prod, 1991);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2140);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10611,7 +11415,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:1992 */
+    /* ./parser//parser_prod.nit:2141 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10626,32 +11430,32 @@ void parser_prod___ATypePropdef___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:1993 */
+      /* ./parser//parser_prod.nit:2142 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1993);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2142);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:1994 */
+      /* ./parser//parser_prod.nit:2143 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1994);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2143);
       }
-      /* ./parser//parser_prod.nit:1995 */
+      /* ./parser//parser_prod.nit:2144 */
       ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1997 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1997);
+      /* ./parser//parser_prod.nit:2146 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2146);
     }
-    /* ./parser//parser_prod.nit:1999 */
+    /* ./parser//parser_prod.nit:2148 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2001 */
+  /* ./parser//parser_prod.nit:2150 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2001);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 2150);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10661,7 +11465,7 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2002 */
+    /* ./parser//parser_prod.nit:2151 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10676,25 +11480,25 @@ void parser_prod___ATypePropdef___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:2003 */
+      /* ./parser//parser_prod.nit:2152 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2003);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2152);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2004 */
+      /* ./parser//parser_prod.nit:2153 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2004);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2153);
       }
-      /* ./parser//parser_prod.nit:2005 */
+      /* ./parser//parser_prod.nit:2154 */
       ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2007 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2007);
+      /* ./parser//parser_prod.nit:2156 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2156);
     }
-    /* ./parser//parser_prod.nit:2009 */
+    /* ./parser//parser_prod.nit:2158 */
     goto label1;
   }
   label1: while(0);
@@ -10708,7 +11512,7 @@ void 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_prod;
-  fra.me.line = 2013;
+  fra.me.line = 2162;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -10717,7 +11521,7 @@ void parser_prod___ATypePropdef___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:2015 */
+  /* ./parser//parser_prod.nit:2164 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10733,16 +11537,16 @@ void 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:2016 */
+    /* ./parser//parser_prod.nit:2165 */
     fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2016);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2165);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2018 */
+  /* ./parser//parser_prod.nit:2167 */
   fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -10758,44 +11562,44 @@ void 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:2019 */
+    /* ./parser//parser_prod.nit:2168 */
     fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2019);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2168);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2021 */
+  /* ./parser//parser_prod.nit:2170 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2021);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 2170);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2022 */
+  /* ./parser//parser_prod.nit:2171 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2022);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser_prod, 2171);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2023 */
+  /* ./parser//parser_prod.nit:2172 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2023);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2172);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2024 */
+  /* ./parser//parser_prod.nit:2173 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2024);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 2173);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -10803,32 +11607,32 @@ void parser_prod___ATypePropdef___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
-  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
+  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos55]) return;
+  if (init_table[itpos57]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2028;
+  fra.me.line = 2177;
   fra.me.meth = LOCATE_parser_prod___AReadAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
+  init_table[itpos57] = 1;
   return;
 }
 void parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
+  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].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[itpos56]) return;
+  if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2030;
+  fra.me.line = 2179;
   fra.me.meth = LOCATE_parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -10838,11 +11642,11 @@ void parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int*
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2035 */
+  /* ./parser//parser_prod.nit:2184 */
   CALL_parser_prod___AReadAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2036 */
+  /* ./parser//parser_prod.nit:2185 */
   ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2037 */
+  /* ./parser//parser_prod.nit:2186 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -10857,28 +11661,28 @@ void parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int*
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2038 */
+    /* ./parser//parser_prod.nit:2187 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2038);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2187);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2040 */
+  /* ./parser//parser_prod.nit:2189 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2040);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2189);
   }
   ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2041 */
+  /* ./parser//parser_prod.nit:2190 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2041);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2190);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
+  init_table[itpos58] = 1;
   return;
 }
 void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
@@ -10888,7 +11692,7 @@ void parser_prod___AReadAble___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_prod;
-  fra.me.line = 2044;
+  fra.me.line = 2193;
   fra.me.meth = LOCATE_parser_prod___AReadAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10899,7 +11703,7 @@ void parser_prod___AReadAble___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:2046 */
+  /* ./parser//parser_prod.nit:2195 */
   fra.me.REG[3] = ATTR_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)) {
@@ -10914,7 +11718,7 @@ void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2047 */
+    /* ./parser//parser_prod.nit:2196 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10929,32 +11733,32 @@ void parser_prod___AReadAble___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:2048 */
+      /* ./parser//parser_prod.nit:2197 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2048);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2197);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2049 */
+      /* ./parser//parser_prod.nit:2198 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2049);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2198);
       }
-      /* ./parser//parser_prod.nit:2050 */
+      /* ./parser//parser_prod.nit:2199 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2052 */
+      /* ./parser//parser_prod.nit:2201 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2054 */
+    /* ./parser//parser_prod.nit:2203 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2056 */
+  /* ./parser//parser_prod.nit:2205 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2056);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser_prod, 2205);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10964,7 +11768,7 @@ void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2057 */
+    /* ./parser//parser_prod.nit:2206 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -10979,25 +11783,25 @@ void parser_prod___AReadAble___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:2058 */
+      /* ./parser//parser_prod.nit:2207 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2058);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2207);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2059 */
+      /* ./parser//parser_prod.nit:2208 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreadable, ID_TKwreadable)) /*cast TKwreadable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2059);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2208);
       }
-      /* ./parser//parser_prod.nit:2060 */
+      /* ./parser//parser_prod.nit:2209 */
       ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2062 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2062);
+      /* ./parser//parser_prod.nit:2211 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2211);
     }
-    /* ./parser//parser_prod.nit:2064 */
+    /* ./parser//parser_prod.nit:2213 */
     goto label1;
   }
   label1: while(0);
@@ -11011,7 +11815,7 @@ void 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_prod;
-  fra.me.line = 2068;
+  fra.me.line = 2217;
   fra.me.meth = LOCATE_parser_prod___AReadAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -11020,7 +11824,7 @@ void parser_prod___AReadAble___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:2070 */
+  /* ./parser//parser_prod.nit:2219 */
   fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11036,20 +11840,20 @@ void 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:2071 */
+    /* ./parser//parser_prod.nit:2220 */
     fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2071);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2220);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2073 */
+  /* ./parser//parser_prod.nit:2222 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2073);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser_prod, 2222);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -11057,32 +11861,32 @@ void parser_prod___AReadAble___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
-  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos57]) return;
+  if (init_table[itpos59]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2077;
+  fra.me.line = 2226;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
+  init_table[itpos59] = 1;
   return;
 }
 void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].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[itpos60]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2079;
+  fra.me.line = 2228;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11094,11 +11898,11 @@ void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2085 */
+  /* ./parser//parser_prod.nit:2234 */
   CALL_parser_prod___AWriteAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2086 */
+  /* ./parser//parser_prod.nit:2235 */
   ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2087 */
+  /* ./parser//parser_prod.nit:2236 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11113,16 +11917,16 @@ void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2088 */
+    /* ./parser//parser_prod.nit:2237 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2088);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2237);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2090 */
+  /* ./parser//parser_prod.nit:2239 */
   ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2091 */
+  /* ./parser//parser_prod.nit:2240 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11137,28 +11941,28 @@ void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2092 */
+    /* ./parser//parser_prod.nit:2241 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2092);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2241);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2094 */
+  /* ./parser//parser_prod.nit:2243 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2094);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2243);
   }
   ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2095 */
+  /* ./parser//parser_prod.nit:2244 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2095);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2244);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos58] = 1;
+  init_table[itpos60] = 1;
   return;
 }
 void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11168,7 +11972,7 @@ void parser_prod___AWriteAble___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_prod;
-  fra.me.line = 2098;
+  fra.me.line = 2247;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11179,7 +11983,7 @@ void parser_prod___AWriteAble___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:2100 */
+  /* ./parser//parser_prod.nit:2249 */
   fra.me.REG[3] = ATTR_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)) {
@@ -11194,7 +11998,7 @@ void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2101 */
+    /* ./parser//parser_prod.nit:2250 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11209,28 +12013,28 @@ void parser_prod___AWriteAble___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:2102 */
+      /* ./parser//parser_prod.nit:2251 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2102);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2251);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2103 */
+      /* ./parser//parser_prod.nit:2252 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2103);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2252);
       }
-      /* ./parser//parser_prod.nit:2104 */
+      /* ./parser//parser_prod.nit:2253 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2106 */
+      /* ./parser//parser_prod.nit:2255 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2108 */
+    /* ./parser//parser_prod.nit:2257 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2110 */
+  /* ./parser//parser_prod.nit:2259 */
   fra.me.REG[3] = ATTR_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)) {
@@ -11245,7 +12049,7 @@ void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2111 */
+    /* ./parser//parser_prod.nit:2260 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11260,32 +12064,32 @@ void parser_prod___AWriteAble___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:2112 */
+      /* ./parser//parser_prod.nit:2261 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2112);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2261);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2113 */
+      /* ./parser//parser_prod.nit:2262 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2113);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2262);
       }
-      /* ./parser//parser_prod.nit:2114 */
+      /* ./parser//parser_prod.nit:2263 */
       ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2116 */
+      /* ./parser//parser_prod.nit:2265 */
       ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2118 */
+    /* ./parser//parser_prod.nit:2267 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2120 */
+  /* ./parser//parser_prod.nit:2269 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2120);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser_prod, 2269);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11295,7 +12099,7 @@ void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2121 */
+    /* ./parser//parser_prod.nit:2270 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11310,25 +12114,25 @@ void parser_prod___AWriteAble___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:2122 */
+      /* ./parser//parser_prod.nit:2271 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2122);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2271);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2123 */
+      /* ./parser//parser_prod.nit:2272 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwritable, ID_TKwwritable)) /*cast TKwwritable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2123);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2272);
       }
-      /* ./parser//parser_prod.nit:2124 */
+      /* ./parser//parser_prod.nit:2273 */
       ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2126 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2126);
+      /* ./parser//parser_prod.nit:2275 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2275);
     }
-    /* ./parser//parser_prod.nit:2128 */
+    /* ./parser//parser_prod.nit:2277 */
     goto label1;
   }
   label1: while(0);
@@ -11342,7 +12146,7 @@ void 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_prod;
-  fra.me.line = 2132;
+  fra.me.line = 2281;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -11351,7 +12155,7 @@ void parser_prod___AWriteAble___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:2134 */
+  /* ./parser//parser_prod.nit:2283 */
   fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11367,16 +12171,16 @@ void 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:2135 */
+    /* ./parser//parser_prod.nit:2284 */
     fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2135);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2284);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2137 */
+  /* ./parser//parser_prod.nit:2286 */
   fra.me.REG[2] = ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -11392,20 +12196,20 @@ void 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:2138 */
+    /* ./parser//parser_prod.nit:2287 */
     fra.me.REG[2] = ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2138);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2287);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2140 */
+  /* ./parser//parser_prod.nit:2289 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2140);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser_prod, 2289);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -11413,31 +12217,31 @@ void parser_prod___AWriteAble___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
-  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos59]) return;
+  if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2144;
+  fra.me.line = 2293;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
+  init_table[itpos61] = 1;
   return;
 }
 void parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int* init_table){
-  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos60]) return;
+  if (init_table[itpos62]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2146;
+  fra.me.line = 2295;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11445,23 +12249,23 @@ void parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2150 */
+  /* ./parser//parser_prod.nit:2299 */
   CALL_parser_prod___AIdMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2151 */
+  /* ./parser//parser_prod.nit:2300 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2151);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2300);
   }
   ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2152 */
+  /* ./parser//parser_prod.nit:2301 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2152);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2301);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos60] = 1;
+  init_table[itpos62] = 1;
   return;
 }
 void parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11471,7 +12275,7 @@ void parser_prod___AIdMethid___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_prod;
-  fra.me.line = 2155;
+  fra.me.line = 2304;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11482,11 +12286,11 @@ void parser_prod___AIdMethid___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:2157 */
+  /* ./parser//parser_prod.nit:2306 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2157);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2306);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11496,7 +12300,7 @@ void parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2158 */
+    /* ./parser//parser_prod.nit:2307 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11511,25 +12315,25 @@ void parser_prod___AIdMethid___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:2159 */
+      /* ./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_prod, 2159);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2308);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2160 */
+      /* ./parser//parser_prod.nit:2309 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2160);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2309);
       }
-      /* ./parser//parser_prod.nit:2161 */
+      /* ./parser//parser_prod.nit:2310 */
       ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2163 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2163);
+      /* ./parser//parser_prod.nit:2312 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2312);
     }
-    /* ./parser//parser_prod.nit:2165 */
+    /* ./parser//parser_prod.nit:2314 */
     goto label1;
   }
   label1: while(0);
@@ -11542,7 +12346,7 @@ void parser_prod___AIdMethid___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_prod;
-  fra.me.line = 2169;
+  fra.me.line = 2318;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11550,11 +12354,11 @@ void 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:2171 */
+  /* ./parser//parser_prod.nit:2320 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2171);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2320);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -11562,31 +12366,31 @@ void parser_prod___AIdMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
-  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos61]) return;
+  if (init_table[itpos63]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2175;
+  fra.me.line = 2324;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
+  init_table[itpos63] = 1;
   return;
 }
 void parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, int* init_table){
-  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos62]) return;
+  if (init_table[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2177;
+  fra.me.line = 2326;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11594,23 +12398,23 @@ void parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, int* init_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2181 */
+  /* ./parser//parser_prod.nit:2330 */
   CALL_parser_prod___APlusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2182 */
+  /* ./parser//parser_prod.nit:2331 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2182);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2331);
   }
   ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2183 */
+  /* ./parser//parser_prod.nit:2332 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2183);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2332);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos62] = 1;
+  init_table[itpos64] = 1;
   return;
 }
 void parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11620,7 +12424,7 @@ void parser_prod___APlusMethid___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_prod;
-  fra.me.line = 2186;
+  fra.me.line = 2335;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11631,11 +12435,11 @@ void parser_prod___APlusMethid___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:2188 */
+  /* ./parser//parser_prod.nit:2337 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2188);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser_prod, 2337);
   }
   fra.me.REG[3] = ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11645,7 +12449,7 @@ void parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2189 */
+    /* ./parser//parser_prod.nit:2338 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11660,25 +12464,25 @@ void parser_prod___APlusMethid___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:2190 */
+      /* ./parser//parser_prod.nit:2339 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2190);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2339);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2191 */
+      /* ./parser//parser_prod.nit:2340 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPlus, ID_TPlus)) /*cast TPlus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2191);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2340);
       }
-      /* ./parser//parser_prod.nit:2192 */
+      /* ./parser//parser_prod.nit:2341 */
       ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2194 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2194);
+      /* ./parser//parser_prod.nit:2343 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2343);
     }
-    /* ./parser//parser_prod.nit:2196 */
+    /* ./parser//parser_prod.nit:2345 */
     goto label1;
   }
   label1: while(0);
@@ -11691,7 +12495,7 @@ void parser_prod___APlusMethid___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_prod;
-  fra.me.line = 2200;
+  fra.me.line = 2349;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11699,11 +12503,11 @@ void 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:2202 */
+  /* ./parser//parser_prod.nit:2351 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2202);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser_prod, 2351);
   }
   fra.me.REG[0] = ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -11711,31 +12515,31 @@ void parser_prod___APlusMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table){
-  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos63]) return;
+  if (init_table[itpos65]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2206;
+  fra.me.line = 2355;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
+  init_table[itpos65] = 1;
   return;
 }
 void parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1, int* init_table){
-  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos64]) return;
+  if (init_table[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2208;
+  fra.me.line = 2357;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11743,23 +12547,23 @@ void parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1, int* ini
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2212 */
+  /* ./parser//parser_prod.nit:2361 */
   CALL_parser_prod___AMinusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2213 */
+  /* ./parser//parser_prod.nit:2362 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2213);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2362);
   }
   ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2214 */
+  /* ./parser//parser_prod.nit:2363 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2214);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2363);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos64] = 1;
+  init_table[itpos66] = 1;
   return;
 }
 void parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11769,7 +12573,7 @@ void parser_prod___AMinusMethid___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_prod;
-  fra.me.line = 2217;
+  fra.me.line = 2366;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11780,11 +12584,11 @@ void parser_prod___AMinusMethid___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:2219 */
+  /* ./parser//parser_prod.nit:2368 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2219);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 2368);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11794,7 +12598,7 @@ void parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2220 */
+    /* ./parser//parser_prod.nit:2369 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11809,25 +12613,25 @@ void parser_prod___AMinusMethid___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:2221 */
+      /* ./parser//parser_prod.nit:2370 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2370);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2222 */
+      /* ./parser//parser_prod.nit:2371 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2222);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2371);
       }
-      /* ./parser//parser_prod.nit:2223 */
+      /* ./parser//parser_prod.nit:2372 */
       ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2225 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2225);
+      /* ./parser//parser_prod.nit:2374 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2374);
     }
-    /* ./parser//parser_prod.nit:2227 */
+    /* ./parser//parser_prod.nit:2376 */
     goto label1;
   }
   label1: while(0);
@@ -11840,7 +12644,7 @@ void parser_prod___AMinusMethid___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_prod;
-  fra.me.line = 2231;
+  fra.me.line = 2380;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11848,11 +12652,11 @@ void 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:2233 */
+  /* ./parser//parser_prod.nit:2382 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2233);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 2382);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -11860,31 +12664,31 @@ void parser_prod___AMinusMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
-  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos65]) return;
+  if (init_table[itpos67]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2237;
+  fra.me.line = 2386;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
+  init_table[itpos67] = 1;
   return;
 }
 void parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, int* init_table){
-  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos66]) return;
+  if (init_table[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2239;
+  fra.me.line = 2388;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11892,23 +12696,23 @@ void parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, int* init_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2243 */
+  /* ./parser//parser_prod.nit:2392 */
   CALL_parser_prod___AStarMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2244 */
+  /* ./parser//parser_prod.nit:2393 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2244);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2393);
   }
   ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2245 */
+  /* ./parser//parser_prod.nit:2394 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2245);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2394);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos66] = 1;
+  init_table[itpos68] = 1;
   return;
 }
 void parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11918,7 +12722,7 @@ void parser_prod___AStarMethid___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_prod;
-  fra.me.line = 2248;
+  fra.me.line = 2397;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11929,11 +12733,11 @@ void parser_prod___AStarMethid___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:2250 */
+  /* ./parser//parser_prod.nit:2399 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2250);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser_prod, 2399);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11943,7 +12747,7 @@ void parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2251 */
+    /* ./parser//parser_prod.nit:2400 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -11958,25 +12762,25 @@ void parser_prod___AStarMethid___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:2252 */
+      /* ./parser//parser_prod.nit:2401 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2252);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2401);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2253 */
+      /* ./parser//parser_prod.nit:2402 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStar, ID_TStar)) /*cast TStar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2253);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2402);
       }
-      /* ./parser//parser_prod.nit:2254 */
+      /* ./parser//parser_prod.nit:2403 */
       ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2256 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2256);
+      /* ./parser//parser_prod.nit:2405 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2405);
     }
-    /* ./parser//parser_prod.nit:2258 */
+    /* ./parser//parser_prod.nit:2407 */
     goto label1;
   }
   label1: while(0);
@@ -11989,7 +12793,7 @@ void parser_prod___AStarMethid___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_prod;
-  fra.me.line = 2262;
+  fra.me.line = 2411;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -11997,11 +12801,11 @@ void 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:2264 */
+  /* ./parser//parser_prod.nit:2413 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2264);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser_prod, 2413);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12009,31 +12813,31 @@ void parser_prod___AStarMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table){
-  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
+  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos67]) return;
+  if (init_table[itpos69]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2268;
+  fra.me.line = 2417;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
+  init_table[itpos69] = 1;
   return;
 }
 void parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1, int* init_table){
-  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
+  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos68]) return;
+  if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2270;
+  fra.me.line = 2419;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12041,23 +12845,23 @@ void parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1, int* ini
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2274 */
+  /* ./parser//parser_prod.nit:2423 */
   CALL_parser_prod___ASlashMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2275 */
+  /* ./parser//parser_prod.nit:2424 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2275);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2424);
   }
   ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2276 */
+  /* ./parser//parser_prod.nit:2425 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2276);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2425);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos68] = 1;
+  init_table[itpos70] = 1;
   return;
 }
 void parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12067,7 +12871,7 @@ void parser_prod___ASlashMethid___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_prod;
-  fra.me.line = 2279;
+  fra.me.line = 2428;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12078,11 +12882,11 @@ void parser_prod___ASlashMethid___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:2281 */
+  /* ./parser//parser_prod.nit:2430 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2281);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser_prod, 2430);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12092,7 +12896,7 @@ void parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2282 */
+    /* ./parser//parser_prod.nit:2431 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12107,25 +12911,25 @@ void parser_prod___ASlashMethid___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:2283 */
+      /* ./parser//parser_prod.nit:2432 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2283);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2432);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2284 */
+      /* ./parser//parser_prod.nit:2433 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TSlash, ID_TSlash)) /*cast TSlash*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2284);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2433);
       }
-      /* ./parser//parser_prod.nit:2285 */
+      /* ./parser//parser_prod.nit:2434 */
       ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2287 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2287);
+      /* ./parser//parser_prod.nit:2436 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2436);
     }
-    /* ./parser//parser_prod.nit:2289 */
+    /* ./parser//parser_prod.nit:2438 */
     goto label1;
   }
   label1: while(0);
@@ -12138,7 +12942,7 @@ void parser_prod___ASlashMethid___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_prod;
-  fra.me.line = 2293;
+  fra.me.line = 2442;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12146,11 +12950,11 @@ void 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:2295 */
+  /* ./parser//parser_prod.nit:2444 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2295);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser_prod, 2444);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12158,31 +12962,31 @@ void parser_prod___ASlashMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___APercentMethid___empty_init(val_t p0, int* init_table){
-  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos69]) return;
+  if (init_table[itpos71]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2299;
+  fra.me.line = 2448;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
+  init_table[itpos71] = 1;
   return;
 }
 void parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t p1, int* init_table){
-  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos70]) return;
+  if (init_table[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2301;
+  fra.me.line = 2450;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12190,23 +12994,23 @@ void parser_prod___APercentMethid___init_apercentmethid(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:2305 */
+  /* ./parser//parser_prod.nit:2454 */
   CALL_parser_prod___APercentMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2306 */
+  /* ./parser//parser_prod.nit:2455 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2306);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2455);
   }
   ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2307 */
+  /* ./parser//parser_prod.nit:2456 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2307);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2456);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos70] = 1;
+  init_table[itpos72] = 1;
   return;
 }
 void parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12216,7 +13020,7 @@ void parser_prod___APercentMethid___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_prod;
-  fra.me.line = 2310;
+  fra.me.line = 2459;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12227,11 +13031,11 @@ void parser_prod___APercentMethid___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:2312 */
+  /* ./parser//parser_prod.nit:2461 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2312);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser_prod, 2461);
   }
   fra.me.REG[3] = ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12241,7 +13045,7 @@ void parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2313 */
+    /* ./parser//parser_prod.nit:2462 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12256,25 +13060,25 @@ void parser_prod___APercentMethid___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:2314 */
+      /* ./parser//parser_prod.nit:2463 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2314);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2463);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2315 */
+      /* ./parser//parser_prod.nit:2464 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPercent, ID_TPercent)) /*cast TPercent*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2315);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2464);
       }
-      /* ./parser//parser_prod.nit:2316 */
+      /* ./parser//parser_prod.nit:2465 */
       ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2318 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2318);
+      /* ./parser//parser_prod.nit:2467 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2467);
     }
-    /* ./parser//parser_prod.nit:2320 */
+    /* ./parser//parser_prod.nit:2469 */
     goto label1;
   }
   label1: while(0);
@@ -12287,7 +13091,7 @@ void parser_prod___APercentMethid___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_prod;
-  fra.me.line = 2324;
+  fra.me.line = 2473;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12295,11 +13099,11 @@ void 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:2326 */
+  /* ./parser//parser_prod.nit:2475 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2326);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser_prod, 2475);
   }
   fra.me.REG[0] = ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12307,31 +13111,31 @@ void parser_prod___APercentMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
-  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos71]) return;
+  if (init_table[itpos73]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2330;
+  fra.me.line = 2479;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
+  init_table[itpos73] = 1;
   return;
 }
 void parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int* init_table){
-  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos72]) return;
+  if (init_table[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2332;
+  fra.me.line = 2481;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12339,23 +13143,23 @@ void parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2336 */
+  /* ./parser//parser_prod.nit:2485 */
   CALL_parser_prod___AEqMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2337 */
+  /* ./parser//parser_prod.nit:2486 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2337);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2486);
   }
   ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2338 */
+  /* ./parser//parser_prod.nit:2487 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2338);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2487);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos72] = 1;
+  init_table[itpos74] = 1;
   return;
 }
 void parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12365,7 +13169,7 @@ void parser_prod___AEqMethid___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_prod;
-  fra.me.line = 2341;
+  fra.me.line = 2490;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12376,11 +13180,11 @@ void parser_prod___AEqMethid___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:2343 */
+  /* ./parser//parser_prod.nit:2492 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2343);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser_prod, 2492);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12390,7 +13194,7 @@ void parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2344 */
+    /* ./parser//parser_prod.nit:2493 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12405,25 +13209,25 @@ void parser_prod___AEqMethid___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:2345 */
+      /* ./parser//parser_prod.nit:2494 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2345);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2494);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2346 */
+      /* ./parser//parser_prod.nit:2495 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEq, ID_TEq)) /*cast TEq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2346);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2495);
       }
-      /* ./parser//parser_prod.nit:2347 */
+      /* ./parser//parser_prod.nit:2496 */
       ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2349 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2349);
+      /* ./parser//parser_prod.nit:2498 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2498);
     }
-    /* ./parser//parser_prod.nit:2351 */
+    /* ./parser//parser_prod.nit:2500 */
     goto label1;
   }
   label1: while(0);
@@ -12436,7 +13240,7 @@ void parser_prod___AEqMethid___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_prod;
-  fra.me.line = 2355;
+  fra.me.line = 2504;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12444,11 +13248,11 @@ void 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:2357 */
+  /* ./parser//parser_prod.nit:2506 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2357);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser_prod, 2506);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12456,31 +13260,31 @@ void parser_prod___AEqMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
-  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos73]) return;
+  if (init_table[itpos75]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2361;
+  fra.me.line = 2510;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
+  init_table[itpos75] = 1;
   return;
 }
 void parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int* init_table){
-  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos74]) return;
+  if (init_table[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2363;
+  fra.me.line = 2512;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12488,23 +13292,23 @@ void parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2367 */
+  /* ./parser//parser_prod.nit:2516 */
   CALL_parser_prod___ANeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2368 */
+  /* ./parser//parser_prod.nit:2517 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2368);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2517);
   }
   ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2369 */
+  /* ./parser//parser_prod.nit:2518 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2369);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2518);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos74] = 1;
+  init_table[itpos76] = 1;
   return;
 }
 void parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12514,7 +13318,7 @@ void parser_prod___ANeMethid___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_prod;
-  fra.me.line = 2372;
+  fra.me.line = 2521;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12525,11 +13329,11 @@ void parser_prod___ANeMethid___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:2374 */
+  /* ./parser//parser_prod.nit:2523 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2374);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser_prod, 2523);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12539,7 +13343,7 @@ void parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2375 */
+    /* ./parser//parser_prod.nit:2524 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12554,25 +13358,25 @@ void parser_prod___ANeMethid___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:2376 */
+      /* ./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_prod, 2376);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2525);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2377 */
+      /* ./parser//parser_prod.nit:2526 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNe, ID_TNe)) /*cast TNe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2377);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2526);
       }
-      /* ./parser//parser_prod.nit:2378 */
+      /* ./parser//parser_prod.nit:2527 */
       ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2380 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2380);
+      /* ./parser//parser_prod.nit:2529 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2529);
     }
-    /* ./parser//parser_prod.nit:2382 */
+    /* ./parser//parser_prod.nit:2531 */
     goto label1;
   }
   label1: while(0);
@@ -12585,7 +13389,7 @@ void parser_prod___ANeMethid___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_prod;
-  fra.me.line = 2386;
+  fra.me.line = 2535;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12593,11 +13397,11 @@ void 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:2388 */
+  /* ./parser//parser_prod.nit:2537 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2388);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser_prod, 2537);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12605,31 +13409,31 @@ void parser_prod___ANeMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
-  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos75]) return;
+  if (init_table[itpos77]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2392;
+  fra.me.line = 2541;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
+  init_table[itpos77] = 1;
   return;
 }
 void parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int* init_table){
-  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos76]) return;
+  if (init_table[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2394;
+  fra.me.line = 2543;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12637,23 +13441,23 @@ void parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2398 */
+  /* ./parser//parser_prod.nit:2547 */
   CALL_parser_prod___ALeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2399 */
+  /* ./parser//parser_prod.nit:2548 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2399);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2548);
   }
   ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2400 */
+  /* ./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_prod, 2400);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2549);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos76] = 1;
+  init_table[itpos78] = 1;
   return;
 }
 void parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12663,7 +13467,7 @@ void parser_prod___ALeMethid___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_prod;
-  fra.me.line = 2403;
+  fra.me.line = 2552;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12674,11 +13478,11 @@ void parser_prod___ALeMethid___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:2405 */
+  /* ./parser//parser_prod.nit:2554 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2405);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser_prod, 2554);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12688,7 +13492,7 @@ void parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2406 */
+    /* ./parser//parser_prod.nit:2555 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12703,25 +13507,25 @@ void parser_prod___ALeMethid___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:2407 */
+      /* ./parser//parser_prod.nit:2556 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2407);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2556);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2408 */
+      /* ./parser//parser_prod.nit:2557 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLe, ID_TLe)) /*cast TLe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2408);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2557);
       }
-      /* ./parser//parser_prod.nit:2409 */
+      /* ./parser//parser_prod.nit:2558 */
       ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2411 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2411);
+      /* ./parser//parser_prod.nit:2560 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2560);
     }
-    /* ./parser//parser_prod.nit:2413 */
+    /* ./parser//parser_prod.nit:2562 */
     goto label1;
   }
   label1: while(0);
@@ -12734,7 +13538,7 @@ void parser_prod___ALeMethid___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_prod;
-  fra.me.line = 2417;
+  fra.me.line = 2566;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12742,11 +13546,11 @@ void 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:2419 */
+  /* ./parser//parser_prod.nit:2568 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2419);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser_prod, 2568);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12754,31 +13558,31 @@ void parser_prod___ALeMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
-  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos77]) return;
+  if (init_table[itpos79]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2423;
+  fra.me.line = 2572;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
+  init_table[itpos79] = 1;
   return;
 }
 void parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int* init_table){
-  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos78]) return;
+  if (init_table[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2425;
+  fra.me.line = 2574;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12786,23 +13590,23 @@ void parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2429 */
+  /* ./parser//parser_prod.nit:2578 */
   CALL_parser_prod___AGeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2430 */
+  /* ./parser//parser_prod.nit:2579 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2430);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2579);
   }
   ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2431 */
+  /* ./parser//parser_prod.nit:2580 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2431);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2580);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos78] = 1;
+  init_table[itpos80] = 1;
   return;
 }
 void parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12812,7 +13616,7 @@ void parser_prod___AGeMethid___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_prod;
-  fra.me.line = 2434;
+  fra.me.line = 2583;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12823,11 +13627,11 @@ void parser_prod___AGeMethid___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:2436 */
+  /* ./parser//parser_prod.nit:2585 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2436);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser_prod, 2585);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12837,7 +13641,7 @@ void parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2437 */
+    /* ./parser//parser_prod.nit:2586 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -12852,25 +13656,25 @@ void parser_prod___AGeMethid___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:2438 */
+      /* ./parser//parser_prod.nit:2587 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2438);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2587);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2439 */
+      /* ./parser//parser_prod.nit:2588 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGe, ID_TGe)) /*cast TGe*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2439);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2588);
       }
-      /* ./parser//parser_prod.nit:2440 */
+      /* ./parser//parser_prod.nit:2589 */
       ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2442 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2442);
+      /* ./parser//parser_prod.nit:2591 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2591);
     }
-    /* ./parser//parser_prod.nit:2444 */
+    /* ./parser//parser_prod.nit:2593 */
     goto label1;
   }
   label1: while(0);
@@ -12883,7 +13687,7 @@ void parser_prod___AGeMethid___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_prod;
-  fra.me.line = 2448;
+  fra.me.line = 2597;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12891,11 +13695,11 @@ void 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:2450 */
+  /* ./parser//parser_prod.nit:2599 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2450);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser_prod, 2599);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -12903,31 +13707,31 @@ void parser_prod___AGeMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
-  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
+  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos79]) return;
+  if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2454;
+  fra.me.line = 2603;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos79] = 1;
+  init_table[itpos81] = 1;
   return;
 }
 void parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int* init_table){
-  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
+  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos80]) return;
+  if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2456;
+  fra.me.line = 2605;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -12935,23 +13739,23 @@ void parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2460 */
+  /* ./parser//parser_prod.nit:2609 */
   CALL_parser_prod___ALtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2461 */
+  /* ./parser//parser_prod.nit:2610 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2461);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2610);
   }
   ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2462 */
+  /* ./parser//parser_prod.nit:2611 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2462);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2611);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos80] = 1;
+  init_table[itpos82] = 1;
   return;
 }
 void parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -12961,7 +13765,7 @@ void parser_prod___ALtMethid___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_prod;
-  fra.me.line = 2465;
+  fra.me.line = 2614;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -12972,11 +13776,11 @@ void parser_prod___ALtMethid___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:2467 */
+  /* ./parser//parser_prod.nit:2616 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2467);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser_prod, 2616);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -12986,7 +13790,7 @@ void parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2468 */
+    /* ./parser//parser_prod.nit:2617 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13001,25 +13805,25 @@ void parser_prod___ALtMethid___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:2469 */
+      /* ./parser//parser_prod.nit:2618 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2469);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2618);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2470 */
+      /* ./parser//parser_prod.nit:2619 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLt, ID_TLt)) /*cast TLt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2470);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2619);
       }
-      /* ./parser//parser_prod.nit:2471 */
+      /* ./parser//parser_prod.nit:2620 */
       ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2473 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2473);
+      /* ./parser//parser_prod.nit:2622 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2622);
     }
-    /* ./parser//parser_prod.nit:2475 */
+    /* ./parser//parser_prod.nit:2624 */
     goto label1;
   }
   label1: while(0);
@@ -13032,7 +13836,7 @@ void parser_prod___ALtMethid___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_prod;
-  fra.me.line = 2479;
+  fra.me.line = 2628;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13040,11 +13844,11 @@ void 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:2481 */
+  /* ./parser//parser_prod.nit:2630 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2481);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser_prod, 2630);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13052,31 +13856,31 @@ void parser_prod___ALtMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
-  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos81]) return;
+  if (init_table[itpos83]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2485;
+  fra.me.line = 2634;
   fra.me.meth = LOCATE_parser_prod___AGtMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos81] = 1;
+  init_table[itpos83] = 1;
   return;
 }
 void parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int* init_table){
-  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos82]) return;
+  if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2487;
+  fra.me.line = 2636;
   fra.me.meth = LOCATE_parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13084,23 +13888,23 @@ void parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2491 */
+  /* ./parser//parser_prod.nit:2640 */
   CALL_parser_prod___AGtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2492 */
+  /* ./parser//parser_prod.nit:2641 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2492);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2641);
   }
   ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2493 */
+  /* ./parser//parser_prod.nit:2642 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2493);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2642);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos82] = 1;
+  init_table[itpos84] = 1;
   return;
 }
 void parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13110,7 +13914,7 @@ void parser_prod___AGtMethid___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_prod;
-  fra.me.line = 2496;
+  fra.me.line = 2645;
   fra.me.meth = LOCATE_parser_prod___AGtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13121,11 +13925,11 @@ void parser_prod___AGtMethid___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:2498 */
+  /* ./parser//parser_prod.nit:2647 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2498);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser_prod, 2647);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13135,7 +13939,7 @@ void parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2499 */
+    /* ./parser//parser_prod.nit:2648 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13150,25 +13954,25 @@ void parser_prod___AGtMethid___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:2500 */
+      /* ./parser//parser_prod.nit:2649 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2500);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2649);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2501 */
+      /* ./parser//parser_prod.nit:2650 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGt, ID_TGt)) /*cast TGt*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2501);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2650);
       }
-      /* ./parser//parser_prod.nit:2502 */
+      /* ./parser//parser_prod.nit:2651 */
       ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2504 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2504);
+      /* ./parser//parser_prod.nit:2653 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2653);
     }
-    /* ./parser//parser_prod.nit:2506 */
+    /* ./parser//parser_prod.nit:2655 */
     goto label1;
   }
   label1: while(0);
@@ -13181,7 +13985,7 @@ void parser_prod___AGtMethid___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_prod;
-  fra.me.line = 2510;
+  fra.me.line = 2659;
   fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13189,11 +13993,11 @@ void 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:2512 */
+  /* ./parser//parser_prod.nit:2661 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2512);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser_prod, 2661);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13201,31 +14005,31 @@ void parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
-  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlMethid].i;
+  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos83]) return;
+  if (init_table[itpos85]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2516;
+  fra.me.line = 2665;
   fra.me.meth = LOCATE_parser_prod___ALlMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos83] = 1;
+  init_table[itpos85] = 1;
   return;
 }
 void parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int* init_table){
-  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlMethid].i;
+  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos84]) return;
+  if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2518;
+  fra.me.line = 2667;
   fra.me.meth = LOCATE_parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13233,23 +14037,23 @@ void parser_prod___ALlMethid___init_allmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2522 */
+  /* ./parser//parser_prod.nit:2671 */
   CALL_parser_prod___ALlMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2523 */
+  /* ./parser//parser_prod.nit:2672 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2523);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2672);
   }
   ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2524 */
+  /* ./parser//parser_prod.nit:2673 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2524);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2673);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos84] = 1;
+  init_table[itpos86] = 1;
   return;
 }
 void parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13259,7 +14063,7 @@ void parser_prod___ALlMethid___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_prod;
-  fra.me.line = 2527;
+  fra.me.line = 2676;
   fra.me.meth = LOCATE_parser_prod___ALlMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13270,11 +14074,11 @@ void parser_prod___ALlMethid___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:2529 */
+  /* ./parser//parser_prod.nit:2678 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2529);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser_prod, 2678);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13284,7 +14088,7 @@ void parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2530 */
+    /* ./parser//parser_prod.nit:2679 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13299,25 +14103,25 @@ void parser_prod___ALlMethid___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:2531 */
+      /* ./parser//parser_prod.nit:2680 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2531);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2680);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2532 */
+      /* ./parser//parser_prod.nit:2681 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLl, ID_TLl)) /*cast TLl*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2532);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2681);
       }
-      /* ./parser//parser_prod.nit:2533 */
+      /* ./parser//parser_prod.nit:2682 */
       ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2535 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2535);
+      /* ./parser//parser_prod.nit:2684 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2684);
     }
-    /* ./parser//parser_prod.nit:2537 */
+    /* ./parser//parser_prod.nit:2686 */
     goto label1;
   }
   label1: while(0);
@@ -13330,7 +14134,7 @@ void parser_prod___ALlMethid___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_prod;
-  fra.me.line = 2541;
+  fra.me.line = 2690;
   fra.me.meth = LOCATE_parser_prod___ALlMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13338,11 +14142,11 @@ void 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:2543 */
+  /* ./parser//parser_prod.nit:2692 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2543);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser_prod, 2692);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13350,31 +14154,31 @@ void parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
-  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgMethid].i;
+  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos85]) return;
+  if (init_table[itpos87]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2547;
+  fra.me.line = 2696;
   fra.me.meth = LOCATE_parser_prod___AGgMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos85] = 1;
+  init_table[itpos87] = 1;
   return;
 }
 void parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int* init_table){
-  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgMethid].i;
+  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos86]) return;
+  if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2549;
+  fra.me.line = 2698;
   fra.me.meth = LOCATE_parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13382,23 +14186,23 @@ void parser_prod___AGgMethid___init_aggmethid(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2553 */
+  /* ./parser//parser_prod.nit:2702 */
   CALL_parser_prod___AGgMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2554 */
+  /* ./parser//parser_prod.nit:2703 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2554);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2703);
   }
   ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2555 */
+  /* ./parser//parser_prod.nit:2704 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2555);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2704);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos86] = 1;
+  init_table[itpos88] = 1;
   return;
 }
 void parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13408,7 +14212,7 @@ void parser_prod___AGgMethid___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_prod;
-  fra.me.line = 2558;
+  fra.me.line = 2707;
   fra.me.meth = LOCATE_parser_prod___AGgMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13419,11 +14223,11 @@ void parser_prod___AGgMethid___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:2560 */
+  /* ./parser//parser_prod.nit:2709 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2560);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser_prod, 2709);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13433,7 +14237,7 @@ void parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2561 */
+    /* ./parser//parser_prod.nit:2710 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13448,25 +14252,25 @@ void parser_prod___AGgMethid___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:2562 */
+      /* ./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_prod, 2562);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2711);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2563 */
+      /* ./parser//parser_prod.nit:2712 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGg, ID_TGg)) /*cast TGg*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2563);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2712);
       }
-      /* ./parser//parser_prod.nit:2564 */
+      /* ./parser//parser_prod.nit:2713 */
       ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2566 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2566);
+      /* ./parser//parser_prod.nit:2715 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2715);
     }
-    /* ./parser//parser_prod.nit:2568 */
+    /* ./parser//parser_prod.nit:2717 */
     goto label1;
   }
   label1: while(0);
@@ -13479,7 +14283,7 @@ void parser_prod___AGgMethid___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_prod;
-  fra.me.line = 2572;
+  fra.me.line = 2721;
   fra.me.meth = LOCATE_parser_prod___AGgMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13487,11 +14291,11 @@ void 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:2574 */
+  /* ./parser//parser_prod.nit:2723 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2574);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser_prod, 2723);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13499,31 +14303,31 @@ void parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
-  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos87]) return;
+  if (init_table[itpos89]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2578;
+  fra.me.line = 2727;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos87] = 1;
+  init_table[itpos89] = 1;
   return;
 }
 void parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].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[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2580;
+  fra.me.line = 2729;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13533,36 +14337,36 @@ void parser_prod___ABraMethid___init_abramethid(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2585 */
+  /* ./parser//parser_prod.nit:2734 */
   CALL_parser_prod___ABraMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2586 */
+  /* ./parser//parser_prod.nit:2735 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2586);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2735);
   }
   ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2587 */
+  /* ./parser//parser_prod.nit:2736 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2587);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2736);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2588 */
+  /* ./parser//parser_prod.nit:2737 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2588);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2737);
   }
   ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2589 */
+  /* ./parser//parser_prod.nit:2738 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2589);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2738);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos88] = 1;
+  init_table[itpos90] = 1;
   return;
 }
 void parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13572,7 +14376,7 @@ void parser_prod___ABraMethid___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_prod;
-  fra.me.line = 2592;
+  fra.me.line = 2741;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13583,11 +14387,11 @@ void parser_prod___ABraMethid___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:2594 */
+  /* ./parser//parser_prod.nit:2743 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2594);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2743);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13597,7 +14401,7 @@ void parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2595 */
+    /* ./parser//parser_prod.nit:2744 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13612,32 +14416,32 @@ void parser_prod___ABraMethid___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:2596 */
+      /* ./parser//parser_prod.nit:2745 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2596);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2745);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2597 */
+      /* ./parser//parser_prod.nit:2746 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2597);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2746);
       }
-      /* ./parser//parser_prod.nit:2598 */
+      /* ./parser//parser_prod.nit:2747 */
       ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2600 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2600);
+      /* ./parser//parser_prod.nit:2749 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2749);
     }
-    /* ./parser//parser_prod.nit:2602 */
+    /* ./parser//parser_prod.nit:2751 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2604 */
+  /* ./parser//parser_prod.nit:2753 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2604);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2753);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13647,7 +14451,7 @@ void parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2605 */
+    /* ./parser//parser_prod.nit:2754 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13662,25 +14466,25 @@ void parser_prod___ABraMethid___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:2606 */
+      /* ./parser//parser_prod.nit:2755 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2606);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2755);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2607 */
+      /* ./parser//parser_prod.nit:2756 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2607);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2756);
       }
-      /* ./parser//parser_prod.nit:2608 */
+      /* ./parser//parser_prod.nit:2757 */
       ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2610 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2610);
+      /* ./parser//parser_prod.nit:2759 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2759);
     }
-    /* ./parser//parser_prod.nit:2612 */
+    /* ./parser//parser_prod.nit:2761 */
     goto label1;
   }
   label1: while(0);
@@ -13693,7 +14497,7 @@ void parser_prod___ABraMethid___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_prod;
-  fra.me.line = 2616;
+  fra.me.line = 2765;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13702,19 +14506,19 @@ void 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:2618 */
+  /* ./parser//parser_prod.nit:2767 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2618);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2767);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2619 */
+  /* ./parser//parser_prod.nit:2768 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2619);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2768);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13722,31 +14526,31 @@ void parser_prod___ABraMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_table){
-  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
+  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos89]) return;
+  if (init_table[itpos91]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2623;
+  fra.me.line = 2772;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos89] = 1;
+  init_table[itpos91] = 1;
   return;
 }
 void parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val_t p1, int* init_table){
-  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
+  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos90]) return;
+  if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2625;
+  fra.me.line = 2774;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13754,23 +14558,23 @@ void parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val_t p1, in
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2629 */
+  /* ./parser//parser_prod.nit:2778 */
   CALL_parser_prod___AStarshipMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2630 */
+  /* ./parser//parser_prod.nit:2779 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2630);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2779);
   }
   ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2631 */
+  /* ./parser//parser_prod.nit:2780 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2631);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2780);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos90] = 1;
+  init_table[itpos92] = 1;
   return;
 }
 void parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13780,7 +14584,7 @@ void parser_prod___AStarshipMethid___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_prod;
-  fra.me.line = 2634;
+  fra.me.line = 2783;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13791,11 +14595,11 @@ void parser_prod___AStarshipMethid___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:2636 */
+  /* ./parser//parser_prod.nit:2785 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2636);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser_prod, 2785);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13805,7 +14609,7 @@ void parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2637 */
+    /* ./parser//parser_prod.nit:2786 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13820,25 +14624,25 @@ void parser_prod___AStarshipMethid___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:2638 */
+      /* ./parser//parser_prod.nit:2787 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2638);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2787);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2639 */
+      /* ./parser//parser_prod.nit:2788 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStarship, ID_TStarship)) /*cast TStarship*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2639);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2788);
       }
-      /* ./parser//parser_prod.nit:2640 */
+      /* ./parser//parser_prod.nit:2789 */
       ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2642 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2642);
+      /* ./parser//parser_prod.nit:2791 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2791);
     }
-    /* ./parser//parser_prod.nit:2644 */
+    /* ./parser//parser_prod.nit:2793 */
     goto label1;
   }
   label1: while(0);
@@ -13851,7 +14655,7 @@ void parser_prod___AStarshipMethid___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_prod;
-  fra.me.line = 2648;
+  fra.me.line = 2797;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -13859,11 +14663,11 @@ void 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:2650 */
+  /* ./parser//parser_prod.nit:2799 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2650);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser_prod, 2799);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -13871,31 +14675,31 @@ void parser_prod___AStarshipMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table){
-  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
+  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos91]) return;
+  if (init_table[itpos93]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2654;
+  fra.me.line = 2803;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos91] = 1;
+  init_table[itpos93] = 1;
   return;
 }
 void parser_prod___AAssignMethid___init_aassignmethid(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
+  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].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[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2656;
+  fra.me.line = 2805;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13905,36 +14709,36 @@ void parser_prod___AAssignMethid___init_aassignmethid(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:2661 */
+  /* ./parser//parser_prod.nit:2810 */
   CALL_parser_prod___AAssignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2662 */
+  /* ./parser//parser_prod.nit:2811 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2662);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2811);
   }
   ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2663 */
+  /* ./parser//parser_prod.nit:2812 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2663);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2812);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2664 */
+  /* ./parser//parser_prod.nit:2813 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2664);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2813);
   }
   ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2665 */
+  /* ./parser//parser_prod.nit:2814 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2665);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2814);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos92] = 1;
+  init_table[itpos94] = 1;
   return;
 }
 void parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -13944,7 +14748,7 @@ void parser_prod___AAssignMethid___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_prod;
-  fra.me.line = 2668;
+  fra.me.line = 2817;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -13955,11 +14759,11 @@ void parser_prod___AAssignMethid___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:2670 */
+  /* ./parser//parser_prod.nit:2819 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2670);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2819);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13969,7 +14773,7 @@ void parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2671 */
+    /* ./parser//parser_prod.nit:2820 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -13984,32 +14788,32 @@ void parser_prod___AAssignMethid___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:2672 */
+      /* ./parser//parser_prod.nit:2821 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2672);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2821);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2673 */
+      /* ./parser//parser_prod.nit:2822 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2673);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2822);
       }
-      /* ./parser//parser_prod.nit:2674 */
+      /* ./parser//parser_prod.nit:2823 */
       ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2676 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2676);
+      /* ./parser//parser_prod.nit:2825 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2825);
     }
-    /* ./parser//parser_prod.nit:2678 */
+    /* ./parser//parser_prod.nit:2827 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2680 */
+  /* ./parser//parser_prod.nit:2829 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2680);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2829);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14019,7 +14823,7 @@ void parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2681 */
+    /* ./parser//parser_prod.nit:2830 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14034,25 +14838,25 @@ void parser_prod___AAssignMethid___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:2682 */
+      /* ./parser//parser_prod.nit:2831 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2682);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2831);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2683 */
+      /* ./parser//parser_prod.nit:2832 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2683);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2832);
       }
-      /* ./parser//parser_prod.nit:2684 */
+      /* ./parser//parser_prod.nit:2833 */
       ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2686 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2686);
+      /* ./parser//parser_prod.nit:2835 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2835);
     }
-    /* ./parser//parser_prod.nit:2688 */
+    /* ./parser//parser_prod.nit:2837 */
     goto label1;
   }
   label1: while(0);
@@ -14065,7 +14869,7 @@ void parser_prod___AAssignMethid___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_prod;
-  fra.me.line = 2692;
+  fra.me.line = 2841;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14074,19 +14878,19 @@ void 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:2694 */
+  /* ./parser//parser_prod.nit:2843 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2694);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2843);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2695 */
+  /* ./parser//parser_prod.nit:2844 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2695);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2844);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14094,31 +14898,31 @@ void parser_prod___AAssignMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_table){
-  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos93]) return;
+  if (init_table[itpos95]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2699;
+  fra.me.line = 2848;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos93] = 1;
+  init_table[itpos95] = 1;
   return;
 }
 void parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].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[itpos96]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2701;
+  fra.me.line = 2850;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14130,49 +14934,49 @@ void parser_prod___ABraassignMethid___init_abraassignmethid(val_t p0, val_t p1,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2707 */
+  /* ./parser//parser_prod.nit:2856 */
   CALL_parser_prod___ABraassignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2708 */
+  /* ./parser//parser_prod.nit:2857 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2708);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2857);
   }
   ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2709 */
+  /* ./parser//parser_prod.nit:2858 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2709);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2858);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2710 */
+  /* ./parser//parser_prod.nit:2859 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2710);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2859);
   }
   ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2711 */
+  /* ./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_prod, 2711);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2860);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2712 */
+  /* ./parser//parser_prod.nit:2861 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2712);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2861);
   }
   ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2713 */
+  /* ./parser//parser_prod.nit:2862 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2713);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2862);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos94] = 1;
+  init_table[itpos96] = 1;
   return;
 }
 void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -14182,7 +14986,7 @@ void parser_prod___ABraassignMethid___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_prod;
-  fra.me.line = 2716;
+  fra.me.line = 2865;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14193,11 +14997,11 @@ void parser_prod___ABraassignMethid___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:2718 */
+  /* ./parser//parser_prod.nit:2867 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2718);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2867);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14207,7 +15011,7 @@ void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2719 */
+    /* ./parser//parser_prod.nit:2868 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14222,32 +15026,32 @@ void parser_prod___ABraassignMethid___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:2720 */
+      /* ./parser//parser_prod.nit:2869 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2720);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2869);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2721 */
+      /* ./parser//parser_prod.nit:2870 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2721);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2870);
       }
-      /* ./parser//parser_prod.nit:2722 */
+      /* ./parser//parser_prod.nit:2871 */
       ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2724 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2724);
+      /* ./parser//parser_prod.nit:2873 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2873);
     }
-    /* ./parser//parser_prod.nit:2726 */
+    /* ./parser//parser_prod.nit:2875 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2728 */
+  /* ./parser//parser_prod.nit:2877 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2728);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2877);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14257,7 +15061,7 @@ void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2729 */
+    /* ./parser//parser_prod.nit:2878 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14272,32 +15076,32 @@ void parser_prod___ABraassignMethid___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:2730 */
+      /* ./parser//parser_prod.nit:2879 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2730);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2879);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2731 */
+      /* ./parser//parser_prod.nit:2880 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2731);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2880);
       }
-      /* ./parser//parser_prod.nit:2732 */
+      /* ./parser//parser_prod.nit:2881 */
       ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2734 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2734);
+      /* ./parser//parser_prod.nit:2883 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2883);
     }
-    /* ./parser//parser_prod.nit:2736 */
+    /* ./parser//parser_prod.nit:2885 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2738 */
+  /* ./parser//parser_prod.nit:2887 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2738);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2887);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -14307,7 +15111,7 @@ void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2739 */
+    /* ./parser//parser_prod.nit:2888 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14322,25 +15126,25 @@ void parser_prod___ABraassignMethid___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:2740 */
+      /* ./parser//parser_prod.nit:2889 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2740);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2889);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2741 */
+      /* ./parser//parser_prod.nit:2890 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2741);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2890);
       }
-      /* ./parser//parser_prod.nit:2742 */
+      /* ./parser//parser_prod.nit:2891 */
       ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2744 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2744);
+      /* ./parser//parser_prod.nit:2893 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2893);
     }
-    /* ./parser//parser_prod.nit:2746 */
+    /* ./parser//parser_prod.nit:2895 */
     goto label1;
   }
   label1: while(0);
@@ -14353,7 +15157,7 @@ void parser_prod___ABraassignMethid___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_prod;
-  fra.me.line = 2750;
+  fra.me.line = 2899;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14362,27 +15166,27 @@ void 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:2752 */
+  /* ./parser//parser_prod.nit:2901 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2752);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2901);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2753 */
+  /* ./parser//parser_prod.nit:2902 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2753);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2902);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2754 */
+  /* ./parser//parser_prod.nit:2903 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2754);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2903);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -14390,32 +15194,32 @@ void parser_prod___ABraassignMethid___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASignature___empty_init(val_t p0, int* init_table){
-  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
+  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos95]) return;
+  if (init_table[itpos97]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2758;
+  fra.me.line = 2907;
   fra.me.meth = LOCATE_parser_prod___ASignature___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
+  init_table[itpos97] = 1;
   return;
 }
 void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
+  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].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[itpos96]) return;
+  if (init_table[itpos98]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2760;
+  fra.me.line = 2909;
   fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14427,12 +15231,12 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2766 */
+  /* ./parser//parser_prod.nit:2915 */
   CALL_parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___ASignature___init_asignature_1));
-  /* ./parser//parser_prod.nit:2772 */
+  /* ./parser//parser_prod.nit:2921 */
   ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2773 */
+  /* ./parser//parser_prod.nit:2922 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -14447,16 +15251,16 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2774 */
+    /* ./parser//parser_prod.nit:2923 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2774);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2923);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ASignature___init_asignature_2));
   stack_frame_head = fra.me.prev;
-  init_table[itpos96] = 1;
+  init_table[itpos98] = 1;
   return;
 }
   void OC_parser_prod___ASignature___init_asignature_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -14464,7 +15268,7 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:2767 */
+    /* ./parser//parser_prod.nit:2916 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -14477,21 +15281,21 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2768 */
+    /* ./parser//parser_prod.nit:2917 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AParam, ID_AParam)) /*cast AParam*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2768);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2917);
     }
-    /* ./parser//parser_prod.nit:2769 */
+    /* ./parser//parser_prod.nit:2918 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2769);
+      nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2918);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASignature____n_params(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:2770 */
+    /* ./parser//parser_prod.nit:2919 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -14501,7 +15305,7 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:2776 */
+    /* ./parser//parser_prod.nit:2925 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -14514,21 +15318,21 @@ void parser_prod___ASignature___init_asignature(val_t p0, val_t p1, val_t p2, va
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:2777 */
+    /* ./parser//parser_prod.nit:2926 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2777);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2926);
     }
-    /* ./parser//parser_prod.nit:2778 */
+    /* ./parser//parser_prod.nit:2927 */
     REGB0 = TAG_Bool(ATTR_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_prod, 2778);
+      nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2927);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASignature____n_closure_decls(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:2779 */
+    /* ./parser//parser_prod.nit:2928 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -14543,7 +15347,7 @@ void parser_prod___ASignature___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_prod;
-  fra.me.line = 2783;
+  fra.me.line = 2932;
   fra.me.meth = LOCATE_parser_prod___ASignature___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14554,12 +15358,12 @@ void parser_prod___ASignature___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:2785 */
+  /* ./parser//parser_prod.nit:2934 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 2785);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2934);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -14569,13 +15373,13 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:2785 */
+      /* ./parser//parser_prod.nit:2934 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:2786 */
+      /* ./parser//parser_prod.nit:2935 */
       REGB3 = TAG_Bool(ATTR_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_prod, 2786);
+        nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2935);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -14592,7 +15396,7 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:2787 */
+        /* ./parser//parser_prod.nit:2936 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -14607,37 +15411,37 @@ void parser_prod___ASignature___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:2788 */
+          /* ./parser//parser_prod.nit:2937 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast AParam*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2788);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2937);
           }
-          /* ./parser//parser_prod.nit:2789 */
+          /* ./parser//parser_prod.nit:2938 */
           REGB3 = TAG_Bool(ATTR_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_prod, 2789);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2938);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:2790 */
+          /* ./parser//parser_prod.nit:2939 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2790);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2939);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:2792 */
+          /* ./parser//parser_prod.nit:2941 */
           REGB3 = TAG_Bool(ATTR_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_prod, 2792);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2941);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:2794 */
+        /* ./parser//parser_prod.nit:2943 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -14652,7 +15456,7 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:2797 */
+  /* ./parser//parser_prod.nit:2946 */
   fra.me.REG[3] = ATTR_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)) {
@@ -14667,7 +15471,7 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2798 */
+    /* ./parser//parser_prod.nit:2947 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -14682,33 +15486,33 @@ void parser_prod___ASignature___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:2799 */
+      /* ./parser//parser_prod.nit:2948 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2799);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2948);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2800 */
+      /* ./parser//parser_prod.nit:2949 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2800);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2949);
       }
-      /* ./parser//parser_prod.nit:2801 */
+      /* ./parser//parser_prod.nit:2950 */
       ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2803 */
+      /* ./parser//parser_prod.nit:2952 */
       ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2805 */
+    /* ./parser//parser_prod.nit:2954 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2807 */
+  /* ./parser//parser_prod.nit:2956 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 2807);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2956);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -14718,13 +15522,13 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:2807 */
+      /* ./parser//parser_prod.nit:2956 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:2808 */
+      /* ./parser//parser_prod.nit:2957 */
       REGB3 = TAG_Bool(ATTR_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_prod, 2808);
+        nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2957);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -14741,7 +15545,7 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:2809 */
+        /* ./parser//parser_prod.nit:2958 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -14756,37 +15560,37 @@ void parser_prod___ASignature___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:2810 */
+          /* ./parser//parser_prod.nit:2959 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2810);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2959);
           }
-          /* ./parser//parser_prod.nit:2811 */
+          /* ./parser//parser_prod.nit:2960 */
           REGB3 = TAG_Bool(ATTR_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_prod, 2811);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2960);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:2812 */
+          /* ./parser//parser_prod.nit:2961 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2812);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2961);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:2814 */
+          /* ./parser//parser_prod.nit:2963 */
           REGB3 = TAG_Bool(ATTR_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_prod, 2814);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2963);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:2816 */
+        /* ./parser//parser_prod.nit:2965 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -14812,7 +15616,7 @@ void 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_prod;
-  fra.me.line = 2821;
+  fra.me.line = 2970;
   fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14821,15 +15625,15 @@ void parser_prod___ASignature___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:2823 */
+  /* ./parser//parser_prod.nit:2972 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2823);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2972);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ASignature___visit_all_1));
-  /* ./parser//parser_prod.nit:2826 */
+  /* ./parser//parser_prod.nit:2975 */
   fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -14845,20 +15649,20 @@ void 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:2827 */
+    /* ./parser//parser_prod.nit:2976 */
     fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2827);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2976);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2829 */
+  /* ./parser//parser_prod.nit:2978 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2829);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2978);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ASignature___visit_all_2));
@@ -14880,7 +15684,7 @@ void 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:2824 */
+    /* ./parser//parser_prod.nit:2973 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -14900,38 +15704,38 @@ void 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:2830 */
+    /* ./parser//parser_prod.nit:2979 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AParam___empty_init(val_t p0, int* init_table){
-  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
+  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos97]) return;
+  if (init_table[itpos99]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2835;
+  fra.me.line = 2984;
   fra.me.meth = LOCATE_parser_prod___AParam___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos97] = 1;
+  init_table[itpos99] = 1;
   return;
 }
 void parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
+  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].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[itpos98]) return;
+  if (init_table[itpos100]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2837;
+  fra.me.line = 2986;
   fra.me.meth = LOCATE_parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14943,24 +15747,24 @@ void parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:2843 */
+  /* ./parser//parser_prod.nit:2992 */
   CALL_parser_prod___AParam___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2844 */
+  /* ./parser//parser_prod.nit:2993 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2844);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2993);
   }
   ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2845 */
+  /* ./parser//parser_prod.nit:2994 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2845);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2994);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2846 */
+  /* ./parser//parser_prod.nit:2995 */
   ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2847 */
+  /* ./parser//parser_prod.nit:2996 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -14975,16 +15779,16 @@ void parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2848 */
+    /* ./parser//parser_prod.nit:2997 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2848);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2997);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2850 */
+  /* ./parser//parser_prod.nit:2999 */
   ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2851 */
+  /* ./parser//parser_prod.nit:3000 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -14999,15 +15803,15 @@ void parser_prod___AParam___init_aparam(val_t p0, val_t p1, val_t p2, val_t p3,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2852 */
+    /* ./parser//parser_prod.nit:3001 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2852);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3001);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos98] = 1;
+  init_table[itpos100] = 1;
   return;
 }
 void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
@@ -15017,7 +15821,7 @@ void 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_prod;
-  fra.me.line = 2856;
+  fra.me.line = 3005;
   fra.me.meth = LOCATE_parser_prod___AParam___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15028,11 +15832,11 @@ void 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:2858 */
+  /* ./parser//parser_prod.nit:3007 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2858);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3007);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15042,7 +15846,7 @@ void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2859 */
+    /* ./parser//parser_prod.nit:3008 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15057,28 +15861,28 @@ void 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:2860 */
+      /* ./parser//parser_prod.nit:3009 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2860);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3009);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2861 */
+      /* ./parser//parser_prod.nit:3010 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2861);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3010);
       }
-      /* ./parser//parser_prod.nit:2862 */
+      /* ./parser//parser_prod.nit:3011 */
       ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2864 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2864);
+      /* ./parser//parser_prod.nit:3013 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3013);
     }
-    /* ./parser//parser_prod.nit:2866 */
+    /* ./parser//parser_prod.nit:3015 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2868 */
+  /* ./parser//parser_prod.nit:3017 */
   fra.me.REG[3] = ATTR_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)) {
@@ -15093,7 +15897,7 @@ void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2869 */
+    /* ./parser//parser_prod.nit:3018 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15108,28 +15912,28 @@ void 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:2870 */
+      /* ./parser//parser_prod.nit:3019 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2870);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3019);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2871 */
+      /* ./parser//parser_prod.nit:3020 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2871);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3020);
       }
-      /* ./parser//parser_prod.nit:2872 */
+      /* ./parser//parser_prod.nit:3021 */
       ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2874 */
+      /* ./parser//parser_prod.nit:3023 */
       ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2876 */
+    /* ./parser//parser_prod.nit:3025 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2878 */
+  /* ./parser//parser_prod.nit:3027 */
   fra.me.REG[3] = ATTR_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)) {
@@ -15144,7 +15948,7 @@ void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2879 */
+    /* ./parser//parser_prod.nit:3028 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15159,25 +15963,25 @@ void 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:2880 */
+      /* ./parser//parser_prod.nit:3029 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2880);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3029);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2881 */
+      /* ./parser//parser_prod.nit:3030 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2881);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3030);
       }
-      /* ./parser//parser_prod.nit:2882 */
+      /* ./parser//parser_prod.nit:3031 */
       ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2884 */
+      /* ./parser//parser_prod.nit:3033 */
       ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2886 */
+    /* ./parser//parser_prod.nit:3035 */
     goto label1;
   }
   label1: while(0);
@@ -15191,7 +15995,7 @@ void 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_prod;
-  fra.me.line = 2890;
+  fra.me.line = 3039;
   fra.me.meth = LOCATE_parser_prod___AParam___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15200,15 +16004,15 @@ void parser_prod___AParam___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:2892 */
+  /* ./parser//parser_prod.nit:3041 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2892);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3041);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2893 */
+  /* ./parser//parser_prod.nit:3042 */
   fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -15224,16 +16028,16 @@ void 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:2894 */
+    /* ./parser//parser_prod.nit:3043 */
     fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2894);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3043);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2896 */
+  /* ./parser//parser_prod.nit:3045 */
   fra.me.REG[2] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -15249,12 +16053,12 @@ void 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:2897 */
+    /* ./parser//parser_prod.nit:3046 */
     fra.me.REG[0] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2897);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3046);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -15262,32 +16066,32 @@ void parser_prod___AParam___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table){
-  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos99]) return;
+  if (init_table[itpos101]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2902;
+  fra.me.line = 3051;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos99] = 1;
+  init_table[itpos101] = 1;
   return;
 }
 void 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 itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].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[itpos102]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2904;
+  fra.me.line = 3053;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -15303,11 +16107,11 @@ void parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1, val_t p2
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:2912 */
+  /* ./parser//parser_prod.nit:3061 */
   CALL_parser_prod___AClosureDecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2913 */
+  /* ./parser//parser_prod.nit:3062 */
   ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2914 */
+  /* ./parser//parser_prod.nit:3063 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -15322,55 +16126,55 @@ void parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2915 */
+    /* ./parser//parser_prod.nit:3064 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2915);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3064);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2917 */
+  /* ./parser//parser_prod.nit:3066 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2917);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3066);
   }
   ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:2918 */
+  /* ./parser//parser_prod.nit:3067 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2918);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3067);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2919 */
+  /* ./parser//parser_prod.nit:3068 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2919);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3068);
   }
   ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:2920 */
+  /* ./parser//parser_prod.nit:3069 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2920);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3069);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2921 */
+  /* ./parser//parser_prod.nit:3070 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2921);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3070);
   }
   ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:2922 */
+  /* ./parser//parser_prod.nit:3071 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2922);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3071);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2923 */
+  /* ./parser//parser_prod.nit:3072 */
   ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:2924 */
+  /* ./parser//parser_prod.nit:3073 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -15385,15 +16189,15 @@ void parser_prod___AClosureDecl___init_aclosuredecl(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2925 */
+    /* ./parser//parser_prod.nit:3074 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2925);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3074);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos100] = 1;
+  init_table[itpos102] = 1;
   return;
 }
 void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
@@ -15403,7 +16207,7 @@ void parser_prod___AClosureDecl___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_prod;
-  fra.me.line = 2929;
+  fra.me.line = 3078;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15414,7 +16218,7 @@ void parser_prod___AClosureDecl___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:2931 */
+  /* ./parser//parser_prod.nit:3080 */
   fra.me.REG[3] = ATTR_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)) {
@@ -15429,7 +16233,7 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2932 */
+    /* ./parser//parser_prod.nit:3081 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15444,32 +16248,32 @@ void parser_prod___AClosureDecl___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:2933 */
+      /* ./parser//parser_prod.nit:3082 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2933);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3082);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2934 */
+      /* ./parser//parser_prod.nit:3083 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2934);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3083);
       }
-      /* ./parser//parser_prod.nit:2935 */
+      /* ./parser//parser_prod.nit:3084 */
       ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2937 */
+      /* ./parser//parser_prod.nit:3086 */
       ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2939 */
+    /* ./parser//parser_prod.nit:3088 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2941 */
+  /* ./parser//parser_prod.nit:3090 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2941);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 3090);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15479,7 +16283,7 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2942 */
+    /* ./parser//parser_prod.nit:3091 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15494,32 +16298,32 @@ void parser_prod___AClosureDecl___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:2943 */
+      /* ./parser//parser_prod.nit:3092 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2943);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3092);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2944 */
+      /* ./parser//parser_prod.nit:3093 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2944);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3093);
       }
-      /* ./parser//parser_prod.nit:2945 */
+      /* ./parser//parser_prod.nit:3094 */
       ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2947 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2947);
+      /* ./parser//parser_prod.nit:3096 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3096);
     }
-    /* ./parser//parser_prod.nit:2949 */
+    /* ./parser//parser_prod.nit:3098 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2951 */
+  /* ./parser//parser_prod.nit:3100 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2951);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3100);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15529,7 +16333,7 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2952 */
+    /* ./parser//parser_prod.nit:3101 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15544,32 +16348,32 @@ void parser_prod___AClosureDecl___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:2953 */
+      /* ./parser//parser_prod.nit:3102 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2953);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3102);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2954 */
+      /* ./parser//parser_prod.nit:3103 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2954);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3103);
       }
-      /* ./parser//parser_prod.nit:2955 */
+      /* ./parser//parser_prod.nit:3104 */
       ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2957 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2957);
+      /* ./parser//parser_prod.nit:3106 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3106);
     }
-    /* ./parser//parser_prod.nit:2959 */
+    /* ./parser//parser_prod.nit:3108 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2961 */
+  /* ./parser//parser_prod.nit:3110 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2961);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser_prod, 3110);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15579,7 +16383,7 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2962 */
+    /* ./parser//parser_prod.nit:3111 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15594,28 +16398,28 @@ void parser_prod___AClosureDecl___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:2963 */
+      /* ./parser//parser_prod.nit:3112 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2963);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3112);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2964 */
+      /* ./parser//parser_prod.nit:3113 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2964);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3113);
       }
-      /* ./parser//parser_prod.nit:2965 */
+      /* ./parser//parser_prod.nit:3114 */
       ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2967 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2967);
+      /* ./parser//parser_prod.nit:3116 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3116);
     }
-    /* ./parser//parser_prod.nit:2969 */
+    /* ./parser//parser_prod.nit:3118 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:2971 */
+  /* ./parser//parser_prod.nit:3120 */
   fra.me.REG[3] = ATTR_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)) {
@@ -15630,7 +16434,7 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:2972 */
+    /* ./parser//parser_prod.nit:3121 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15645,25 +16449,25 @@ void parser_prod___AClosureDecl___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:2973 */
+      /* ./parser//parser_prod.nit:3122 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2973);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3122);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:2974 */
+      /* ./parser//parser_prod.nit:3123 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2974);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3123);
       }
-      /* ./parser//parser_prod.nit:2975 */
+      /* ./parser//parser_prod.nit:3124 */
       ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2977 */
+      /* ./parser//parser_prod.nit:3126 */
       ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2979 */
+    /* ./parser//parser_prod.nit:3128 */
     goto label1;
   }
   label1: while(0);
@@ -15677,7 +16481,7 @@ void 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_prod;
-  fra.me.line = 2983;
+  fra.me.line = 3132;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15686,7 +16490,7 @@ void parser_prod___AClosureDecl___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:2985 */
+  /* ./parser//parser_prod.nit:3134 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -15702,40 +16506,40 @@ void 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:2986 */
+    /* ./parser//parser_prod.nit:3135 */
     fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2986);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3135);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:2988 */
+  /* ./parser//parser_prod.nit:3137 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2988);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 3137);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2989 */
+  /* ./parser//parser_prod.nit:3138 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2989);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3138);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2990 */
+  /* ./parser//parser_prod.nit:3139 */
   REGB0 = TAG_Bool(ATTR_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_prod, 2990);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser_prod, 3139);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:2991 */
+  /* ./parser//parser_prod.nit:3140 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -15751,12 +16555,12 @@ void 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:2992 */
+    /* ./parser//parser_prod.nit:3141 */
     fra.me.REG[0] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2992);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3141);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -15764,32 +16568,32 @@ void parser_prod___AClosureDecl___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AType___empty_init(val_t p0, int* init_table){
-  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
+  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos101]) return;
+  if (init_table[itpos103]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2997;
+  fra.me.line = 3146;
   fra.me.meth = LOCATE_parser_prod___AType___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos101] = 1;
+  init_table[itpos103] = 1;
   return;
 }
 void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
+  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].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[itpos102]) return;
+  if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2999;
+  fra.me.line = 3148;
   fra.me.meth = LOCATE_parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15801,11 +16605,11 @@ void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, in
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3005 */
+  /* ./parser//parser_prod.nit:3154 */
   CALL_parser_prod___AType___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3006 */
+  /* ./parser//parser_prod.nit:3155 */
   ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3007 */
+  /* ./parser//parser_prod.nit:3156 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -15820,29 +16624,29 @@ void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, in
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3008 */
+    /* ./parser//parser_prod.nit:3157 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3008);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3157);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3010 */
+  /* ./parser//parser_prod.nit:3159 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3010);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3159);
   }
   ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3011 */
+  /* ./parser//parser_prod.nit:3160 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3011);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3160);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___AType___init_atype_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos102] = 1;
+  init_table[itpos104] = 1;
   return;
 }
   void OC_parser_prod___AType___init_atype_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -15850,7 +16654,7 @@ void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, in
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:3012 */
+    /* ./parser//parser_prod.nit:3161 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -15863,21 +16667,21 @@ void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, in
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3013 */
+    /* ./parser//parser_prod.nit:3162 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3013);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3162);
     }
-    /* ./parser//parser_prod.nit:3014 */
+    /* ./parser//parser_prod.nit:3163 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3014);
+      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3163);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AType____n_types(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:3015 */
+    /* ./parser//parser_prod.nit:3164 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -15892,7 +16696,7 @@ void 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_prod;
-  fra.me.line = 3019;
+  fra.me.line = 3168;
   fra.me.meth = LOCATE_parser_prod___AType___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15903,7 +16707,7 @@ void 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:3021 */
+  /* ./parser//parser_prod.nit:3170 */
   fra.me.REG[3] = ATTR_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)) {
@@ -15918,7 +16722,7 @@ void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3022 */
+    /* ./parser//parser_prod.nit:3171 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15933,32 +16737,32 @@ void 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:3023 */
+      /* ./parser//parser_prod.nit:3172 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3023);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3172);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3024 */
+      /* ./parser//parser_prod.nit:3173 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3024);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3173);
       }
-      /* ./parser//parser_prod.nit:3025 */
+      /* ./parser//parser_prod.nit:3174 */
       ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3027 */
+      /* ./parser//parser_prod.nit:3176 */
       ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3029 */
+    /* ./parser//parser_prod.nit:3178 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3031 */
+  /* ./parser//parser_prod.nit:3180 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3031);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3180);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AType____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -15968,7 +16772,7 @@ void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3032 */
+    /* ./parser//parser_prod.nit:3181 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -15983,33 +16787,33 @@ void 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:3033 */
+      /* ./parser//parser_prod.nit:3182 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3033);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3182);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3034 */
+      /* ./parser//parser_prod.nit:3183 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3034);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3183);
       }
-      /* ./parser//parser_prod.nit:3035 */
+      /* ./parser//parser_prod.nit:3184 */
       ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3037 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3037);
+      /* ./parser//parser_prod.nit:3186 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3186);
     }
-    /* ./parser//parser_prod.nit:3039 */
+    /* ./parser//parser_prod.nit:3188 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3041 */
+  /* ./parser//parser_prod.nit:3190 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 3041);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3190);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -16019,13 +16823,13 @@ void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:3041 */
+      /* ./parser//parser_prod.nit:3190 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:3042 */
+      /* ./parser//parser_prod.nit:3191 */
       REGB3 = TAG_Bool(ATTR_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_prod, 3042);
+        nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3191);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -16042,7 +16846,7 @@ void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:3043 */
+        /* ./parser//parser_prod.nit:3192 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -16057,37 +16861,37 @@ void 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:3044 */
+          /* ./parser//parser_prod.nit:3193 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3044);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3193);
           }
-          /* ./parser//parser_prod.nit:3045 */
+          /* ./parser//parser_prod.nit:3194 */
           REGB3 = TAG_Bool(ATTR_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_prod, 3045);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3194);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:3046 */
+          /* ./parser//parser_prod.nit:3195 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3046);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3195);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:3048 */
+          /* ./parser//parser_prod.nit:3197 */
           REGB3 = TAG_Bool(ATTR_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_prod, 3048);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3197);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:3050 */
+        /* ./parser//parser_prod.nit:3199 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -16113,7 +16917,7 @@ void 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_prod;
-  fra.me.line = 3055;
+  fra.me.line = 3204;
   fra.me.meth = LOCATE_parser_prod___AType___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16122,7 +16926,7 @@ void parser_prod___AType___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:3057 */
+  /* ./parser//parser_prod.nit:3206 */
   fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -16138,28 +16942,28 @@ void 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:3058 */
+    /* ./parser//parser_prod.nit:3207 */
     fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3058);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3207);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3060 */
+  /* ./parser//parser_prod.nit:3209 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3060);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3209);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AType____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3061 */
+  /* ./parser//parser_prod.nit:3210 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3061);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3210);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AType___visit_all_1));
@@ -16181,37 +16985,37 @@ void 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:3062 */
+    /* ./parser//parser_prod.nit:3211 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ALabel___empty_init(val_t p0, int* init_table){
-  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos103]) return;
+  if (init_table[itpos105]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3067;
+  fra.me.line = 3216;
   fra.me.meth = LOCATE_parser_prod___ALabel___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos103] = 1;
+  init_table[itpos105] = 1;
   return;
 }
 void parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos104]) return;
+  if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3069;
+  fra.me.line = 3218;
   fra.me.meth = LOCATE_parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16221,36 +17025,36 @@ void parser_prod___ALabel___init_alabel(val_t p0, val_t p1, val_t p2, int* init_
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3074 */
+  /* ./parser//parser_prod.nit:3223 */
   CALL_parser_prod___ALabel___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3075 */
+  /* ./parser//parser_prod.nit:3224 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3075);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3224);
   }
   ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3076 */
+  /* ./parser//parser_prod.nit:3225 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3076);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3225);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3077 */
+  /* ./parser//parser_prod.nit:3226 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3077);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3226);
   }
   ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3078 */
+  /* ./parser//parser_prod.nit:3227 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3078);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3227);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos104] = 1;
+  init_table[itpos106] = 1;
   return;
 }
 void parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16260,7 +17064,7 @@ void 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_prod;
-  fra.me.line = 3081;
+  fra.me.line = 3230;
   fra.me.meth = LOCATE_parser_prod___ALabel___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16271,11 +17075,11 @@ void 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:3083 */
+  /* ./parser//parser_prod.nit:3232 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3083);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser_prod, 3232);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16285,7 +17089,7 @@ void parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3084 */
+    /* ./parser//parser_prod.nit:3233 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16300,32 +17104,32 @@ void 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:3085 */
+      /* ./parser//parser_prod.nit:3234 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3085);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3234);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3086 */
+      /* ./parser//parser_prod.nit:3235 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwlabel, ID_TKwlabel)) /*cast TKwlabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3086);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3235);
       }
-      /* ./parser//parser_prod.nit:3087 */
+      /* ./parser//parser_prod.nit:3236 */
       ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3089 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3089);
+      /* ./parser//parser_prod.nit:3238 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3238);
     }
-    /* ./parser//parser_prod.nit:3091 */
+    /* ./parser//parser_prod.nit:3240 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3093 */
+  /* ./parser//parser_prod.nit:3242 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3093);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3242);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16335,7 +17139,7 @@ void parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3094 */
+    /* ./parser//parser_prod.nit:3243 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16350,25 +17154,25 @@ void 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:3095 */
+      /* ./parser//parser_prod.nit:3244 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3095);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3244);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3096 */
+      /* ./parser//parser_prod.nit:3245 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3096);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3245);
       }
-      /* ./parser//parser_prod.nit:3097 */
+      /* ./parser//parser_prod.nit:3246 */
       ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3099 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3099);
+      /* ./parser//parser_prod.nit:3248 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3248);
     }
-    /* ./parser//parser_prod.nit:3101 */
+    /* ./parser//parser_prod.nit:3250 */
     goto label1;
   }
   label1: while(0);
@@ -16381,7 +17185,7 @@ void parser_prod___ALabel___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_prod;
-  fra.me.line = 3105;
+  fra.me.line = 3254;
   fra.me.meth = LOCATE_parser_prod___ALabel___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16390,19 +17194,19 @@ void 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:3107 */
+  /* ./parser//parser_prod.nit:3256 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3107);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser_prod, 3256);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3108 */
+  /* ./parser//parser_prod.nit:3257 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3108);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3257);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -16410,30 +17214,30 @@ void parser_prod___ALabel___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
-  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
+  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos105]) return;
+  if (init_table[itpos107]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3112;
+  fra.me.line = 3261;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos105] = 1;
+  init_table[itpos107] = 1;
   return;
 }
 void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_table){
-  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
+  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos106]) return;
+  if (init_table[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3114;
+  fra.me.line = 3263;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16441,11 +17245,11 @@ void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3118 */
+  /* ./parser//parser_prod.nit:3267 */
   CALL_parser_prod___ABlockExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___ABlockExpr___init_ablockexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos106] = 1;
+  init_table[itpos108] = 1;
   return;
 }
   void OC_parser_prod___ABlockExpr___init_ablockexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -16453,7 +17257,7 @@ void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_ta
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:3119 */
+    /* ./parser//parser_prod.nit:3268 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -16466,21 +17270,21 @@ void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_ta
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:3120 */
+    /* ./parser//parser_prod.nit:3269 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3120);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3269);
     }
-    /* ./parser//parser_prod.nit:3121 */
+    /* ./parser//parser_prod.nit:3270 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3121);
+      nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3270);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ABlockExpr____n_expr(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:3122 */
+    /* ./parser//parser_prod.nit:3271 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -16495,7 +17299,7 @@ void parser_prod___ABlockExpr___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_prod;
-  fra.me.line = 3126;
+  fra.me.line = 3275;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16506,12 +17310,12 @@ void parser_prod___ABlockExpr___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:3128 */
+  /* ./parser//parser_prod.nit:3277 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 3128);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3277);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -16521,13 +17325,13 @@ void parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:3128 */
+      /* ./parser//parser_prod.nit:3277 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:3129 */
+      /* ./parser//parser_prod.nit:3278 */
       REGB3 = TAG_Bool(ATTR_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_prod, 3129);
+        nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3278);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -16544,7 +17348,7 @@ void parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:3130 */
+        /* ./parser//parser_prod.nit:3279 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -16559,37 +17363,37 @@ void parser_prod___ABlockExpr___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:3131 */
+          /* ./parser//parser_prod.nit:3280 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3131);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3280);
           }
-          /* ./parser//parser_prod.nit:3132 */
+          /* ./parser//parser_prod.nit:3281 */
           REGB3 = TAG_Bool(ATTR_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_prod, 3132);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3281);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:3133 */
+          /* ./parser//parser_prod.nit:3282 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3133);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3282);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:3135 */
+          /* ./parser//parser_prod.nit:3284 */
           REGB3 = TAG_Bool(ATTR_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_prod, 3135);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3284);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:3137 */
+        /* ./parser//parser_prod.nit:3286 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -16614,7 +17418,7 @@ void 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_prod;
-  fra.me.line = 3142;
+  fra.me.line = 3291;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16622,11 +17426,11 @@ void parser_prod___ABlockExpr___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:3144 */
+  /* ./parser//parser_prod.nit:3293 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3144);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3293);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ABlockExpr___visit_all_1));
@@ -16648,38 +17452,38 @@ void 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:3145 */
+    /* ./parser//parser_prod.nit:3294 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table){
-  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
+  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos107]) return;
+  if (init_table[itpos109]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3150;
+  fra.me.line = 3299;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos107] = 1;
+  init_table[itpos109] = 1;
   return;
 }
 void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
-  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
+  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].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[itpos108]) return;
+  if (init_table[itpos110]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3152;
+  fra.me.line = 3301;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -16695,37 +17499,37 @@ void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3160 */
+  /* ./parser//parser_prod.nit:3309 */
   CALL_parser_prod___AVardeclExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3161 */
+  /* ./parser//parser_prod.nit:3310 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3161);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3310);
   }
   ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3162 */
+  /* ./parser//parser_prod.nit:3311 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3162);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3311);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3163 */
+  /* ./parser//parser_prod.nit:3312 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3163);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3312);
   }
   ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3164 */
+  /* ./parser//parser_prod.nit:3313 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3164);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3313);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3165 */
+  /* ./parser//parser_prod.nit:3314 */
   ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3166 */
+  /* ./parser//parser_prod.nit:3315 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16740,16 +17544,16 @@ void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3167 */
+    /* ./parser//parser_prod.nit:3316 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3167);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3316);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3169 */
+  /* ./parser//parser_prod.nit:3318 */
   ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3170 */
+  /* ./parser//parser_prod.nit:3319 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16764,16 +17568,16 @@ void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3171 */
+    /* ./parser//parser_prod.nit:3320 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3171);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3320);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3173 */
+  /* ./parser//parser_prod.nit:3322 */
   ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3174 */
+  /* ./parser//parser_prod.nit:3323 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -16788,15 +17592,15 @@ void parser_prod___AVardeclExpr___init_avardeclexpr(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3175 */
+    /* ./parser//parser_prod.nit:3324 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3175);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3324);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos108] = 1;
+  init_table[itpos110] = 1;
   return;
 }
 void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16806,7 +17610,7 @@ void parser_prod___AVardeclExpr___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_prod;
-  fra.me.line = 3179;
+  fra.me.line = 3328;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16817,11 +17621,11 @@ void parser_prod___AVardeclExpr___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:3181 */
+  /* ./parser//parser_prod.nit:3330 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3181);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 3330);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16831,7 +17635,7 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3182 */
+    /* ./parser//parser_prod.nit:3331 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16846,32 +17650,32 @@ void parser_prod___AVardeclExpr___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:3183 */
+      /* ./parser//parser_prod.nit:3332 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3183);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3332);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3184 */
+      /* ./parser//parser_prod.nit:3333 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3184);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3333);
       }
-      /* ./parser//parser_prod.nit:3185 */
+      /* ./parser//parser_prod.nit:3334 */
       ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3187 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3187);
+      /* ./parser//parser_prod.nit:3336 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3336);
     }
-    /* ./parser//parser_prod.nit:3189 */
+    /* ./parser//parser_prod.nit:3338 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3191 */
+  /* ./parser//parser_prod.nit:3340 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3191);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3340);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -16881,7 +17685,7 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3192 */
+    /* ./parser//parser_prod.nit:3341 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16896,28 +17700,28 @@ void parser_prod___AVardeclExpr___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:3193 */
+      /* ./parser//parser_prod.nit:3342 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3193);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3342);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3194 */
+      /* ./parser//parser_prod.nit:3343 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3194);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3343);
       }
-      /* ./parser//parser_prod.nit:3195 */
+      /* ./parser//parser_prod.nit:3344 */
       ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3197 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3197);
+      /* ./parser//parser_prod.nit:3346 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3346);
     }
-    /* ./parser//parser_prod.nit:3199 */
+    /* ./parser//parser_prod.nit:3348 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3201 */
+  /* ./parser//parser_prod.nit:3350 */
   fra.me.REG[3] = ATTR_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)) {
@@ -16932,7 +17736,7 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3202 */
+    /* ./parser//parser_prod.nit:3351 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16947,28 +17751,28 @@ void parser_prod___AVardeclExpr___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:3203 */
+      /* ./parser//parser_prod.nit:3352 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3203);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3352);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3204 */
+      /* ./parser//parser_prod.nit:3353 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3204);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3353);
       }
-      /* ./parser//parser_prod.nit:3205 */
+      /* ./parser//parser_prod.nit:3354 */
       ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3207 */
+      /* ./parser//parser_prod.nit:3356 */
       ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3209 */
+    /* ./parser//parser_prod.nit:3358 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3211 */
+  /* ./parser//parser_prod.nit:3360 */
   fra.me.REG[3] = ATTR_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)) {
@@ -16983,7 +17787,7 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3212 */
+    /* ./parser//parser_prod.nit:3361 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -16998,28 +17802,28 @@ void parser_prod___AVardeclExpr___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:3213 */
+      /* ./parser//parser_prod.nit:3362 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3213);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3362);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3214 */
+      /* ./parser//parser_prod.nit:3363 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3214);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3363);
       }
-      /* ./parser//parser_prod.nit:3215 */
+      /* ./parser//parser_prod.nit:3364 */
       ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3217 */
+      /* ./parser//parser_prod.nit:3366 */
       ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3219 */
+    /* ./parser//parser_prod.nit:3368 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3221 */
+  /* ./parser//parser_prod.nit:3370 */
   fra.me.REG[3] = ATTR_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)) {
@@ -17034,7 +17838,7 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3222 */
+    /* ./parser//parser_prod.nit:3371 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17049,25 +17853,25 @@ void parser_prod___AVardeclExpr___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:3223 */
+      /* ./parser//parser_prod.nit:3372 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3223);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3372);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3224 */
+      /* ./parser//parser_prod.nit:3373 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3224);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3373);
       }
-      /* ./parser//parser_prod.nit:3225 */
+      /* ./parser//parser_prod.nit:3374 */
       ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3227 */
+      /* ./parser//parser_prod.nit:3376 */
       ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3229 */
+    /* ./parser//parser_prod.nit:3378 */
     goto label1;
   }
   label1: while(0);
@@ -17081,7 +17885,7 @@ void 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_prod;
-  fra.me.line = 3233;
+  fra.me.line = 3382;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17090,23 +17894,23 @@ void parser_prod___AVardeclExpr___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:3235 */
+  /* ./parser//parser_prod.nit:3384 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3235);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 3384);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3236 */
+  /* ./parser//parser_prod.nit:3385 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3236);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3385);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3237 */
+  /* ./parser//parser_prod.nit:3386 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17122,16 +17926,16 @@ void 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:3238 */
+    /* ./parser//parser_prod.nit:3387 */
     fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3238);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3387);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3240 */
+  /* ./parser//parser_prod.nit:3389 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17147,16 +17951,16 @@ void 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:3241 */
+    /* ./parser//parser_prod.nit:3390 */
     fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3241);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3390);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3243 */
+  /* ./parser//parser_prod.nit:3392 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17172,12 +17976,12 @@ void 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:3244 */
+    /* ./parser//parser_prod.nit:3393 */
     fra.me.REG[0] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3244);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3393);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -17185,32 +17989,32 @@ void parser_prod___AVardeclExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
-  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos109]) return;
+  if (init_table[itpos111]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3249;
+  fra.me.line = 3398;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos109] = 1;
+  init_table[itpos111] = 1;
   return;
 }
 void parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_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[itpos110]) return;
+  if (init_table[itpos112]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3251;
+  fra.me.line = 3400;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17220,11 +18024,11 @@ void parser_prod___AReturnExpr___init_areturnexpr(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:3256 */
+  /* ./parser//parser_prod.nit:3405 */
   CALL_parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3257 */
+  /* ./parser//parser_prod.nit:3406 */
   ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3258 */
+  /* ./parser//parser_prod.nit:3407 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17239,16 +18043,16 @@ void parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3259 */
+    /* ./parser//parser_prod.nit:3408 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3259);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3408);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3261 */
+  /* ./parser//parser_prod.nit:3410 */
   ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3262 */
+  /* ./parser//parser_prod.nit:3411 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17263,15 +18067,15 @@ void parser_prod___AReturnExpr___init_areturnexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3263 */
+    /* ./parser//parser_prod.nit:3412 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3263);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3412);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos110] = 1;
+  init_table[itpos112] = 1;
   return;
 }
 void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17281,7 +18085,7 @@ void parser_prod___AReturnExpr___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_prod;
-  fra.me.line = 3267;
+  fra.me.line = 3416;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17292,7 +18096,7 @@ void parser_prod___AReturnExpr___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:3269 */
+  /* ./parser//parser_prod.nit:3418 */
   fra.me.REG[3] = ATTR_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)) {
@@ -17307,7 +18111,7 @@ void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3270 */
+    /* ./parser//parser_prod.nit:3419 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17322,28 +18126,28 @@ void parser_prod___AReturnExpr___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:3271 */
+      /* ./parser//parser_prod.nit:3420 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3271);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3420);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3272 */
+      /* ./parser//parser_prod.nit:3421 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3272);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3421);
       }
-      /* ./parser//parser_prod.nit:3273 */
+      /* ./parser//parser_prod.nit:3422 */
       ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3275 */
+      /* ./parser//parser_prod.nit:3424 */
       ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3277 */
+    /* ./parser//parser_prod.nit:3426 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3279 */
+  /* ./parser//parser_prod.nit:3428 */
   fra.me.REG[3] = ATTR_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)) {
@@ -17358,7 +18162,7 @@ void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3280 */
+    /* ./parser//parser_prod.nit:3429 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17373,25 +18177,25 @@ void parser_prod___AReturnExpr___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:3281 */
+      /* ./parser//parser_prod.nit:3430 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3281);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3430);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3282 */
+      /* ./parser//parser_prod.nit:3431 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3282);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3431);
       }
-      /* ./parser//parser_prod.nit:3283 */
+      /* ./parser//parser_prod.nit:3432 */
       ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3285 */
+      /* ./parser//parser_prod.nit:3434 */
       ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3287 */
+    /* ./parser//parser_prod.nit:3436 */
     goto label1;
   }
   label1: while(0);
@@ -17405,7 +18209,7 @@ void 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_prod;
-  fra.me.line = 3291;
+  fra.me.line = 3440;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17414,7 +18218,7 @@ void parser_prod___AReturnExpr___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:3293 */
+  /* ./parser//parser_prod.nit:3442 */
   fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17430,16 +18234,16 @@ void 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:3294 */
+    /* ./parser//parser_prod.nit:3443 */
     fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3294);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3443);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3296 */
+  /* ./parser//parser_prod.nit:3445 */
   fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17455,12 +18259,12 @@ void 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:3297 */
+    /* ./parser//parser_prod.nit:3446 */
     fra.me.REG[0] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3297);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3446);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -17468,32 +18272,32 @@ void parser_prod___AReturnExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
-  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
+  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos111]) return;
+  if (init_table[itpos113]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3302;
+  fra.me.line = 3451;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos111] = 1;
+  init_table[itpos113] = 1;
   return;
 }
 void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
+  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].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[itpos112]) return;
+  if (init_table[itpos114]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3304;
+  fra.me.line = 3453;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17505,24 +18309,24 @@ void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3310 */
+  /* ./parser//parser_prod.nit:3459 */
   CALL_parser_prod___ABreakExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3311 */
+  /* ./parser//parser_prod.nit:3460 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3311);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3460);
   }
   ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3312 */
+  /* ./parser//parser_prod.nit:3461 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3312);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3461);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3313 */
+  /* ./parser//parser_prod.nit:3462 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3314 */
+  /* ./parser//parser_prod.nit:3463 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17537,16 +18341,16 @@ void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3315 */
+    /* ./parser//parser_prod.nit:3464 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3315);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3464);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3317 */
+  /* ./parser//parser_prod.nit:3466 */
   ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3318 */
+  /* ./parser//parser_prod.nit:3467 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -17561,15 +18365,15 @@ void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3319 */
+    /* ./parser//parser_prod.nit:3468 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3319);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3468);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos112] = 1;
+  init_table[itpos114] = 1;
   return;
 }
 void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17579,7 +18383,7 @@ void parser_prod___ABreakExpr___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_prod;
-  fra.me.line = 3323;
+  fra.me.line = 3472;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17590,11 +18394,11 @@ void parser_prod___ABreakExpr___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:3325 */
+  /* ./parser//parser_prod.nit:3474 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3325);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 3474);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17604,7 +18408,7 @@ void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3326 */
+    /* ./parser//parser_prod.nit:3475 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17619,28 +18423,28 @@ void parser_prod___ABreakExpr___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:3327 */
+      /* ./parser//parser_prod.nit:3476 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3327);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3476);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3328 */
+      /* ./parser//parser_prod.nit:3477 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3328);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3477);
       }
-      /* ./parser//parser_prod.nit:3329 */
+      /* ./parser//parser_prod.nit:3478 */
       ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3331 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3331);
+      /* ./parser//parser_prod.nit:3480 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3480);
     }
-    /* ./parser//parser_prod.nit:3333 */
+    /* ./parser//parser_prod.nit:3482 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3335 */
+  /* ./parser//parser_prod.nit:3484 */
   fra.me.REG[3] = ATTR_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)) {
@@ -17655,7 +18459,7 @@ void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3336 */
+    /* ./parser//parser_prod.nit:3485 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17670,28 +18474,28 @@ void parser_prod___ABreakExpr___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:3337 */
+      /* ./parser//parser_prod.nit:3486 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3337);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3486);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3338 */
+      /* ./parser//parser_prod.nit:3487 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3338);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3487);
       }
-      /* ./parser//parser_prod.nit:3339 */
+      /* ./parser//parser_prod.nit:3488 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3341 */
+      /* ./parser//parser_prod.nit:3490 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3343 */
+    /* ./parser//parser_prod.nit:3492 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3345 */
+  /* ./parser//parser_prod.nit:3494 */
   fra.me.REG[3] = ATTR_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)) {
@@ -17706,7 +18510,7 @@ void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3346 */
+    /* ./parser//parser_prod.nit:3495 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17721,25 +18525,25 @@ void parser_prod___ABreakExpr___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:3347 */
+      /* ./parser//parser_prod.nit:3496 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3347);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3496);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3348 */
+      /* ./parser//parser_prod.nit:3497 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3348);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3497);
       }
-      /* ./parser//parser_prod.nit:3349 */
+      /* ./parser//parser_prod.nit:3498 */
       ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3351 */
+      /* ./parser//parser_prod.nit:3500 */
       ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3353 */
+    /* ./parser//parser_prod.nit:3502 */
     goto label1;
   }
   label1: while(0);
@@ -17753,7 +18557,7 @@ void 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_prod;
-  fra.me.line = 3357;
+  fra.me.line = 3506;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -17762,15 +18566,15 @@ void parser_prod___ABreakExpr___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:3359 */
+  /* ./parser//parser_prod.nit:3508 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3359);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 3508);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3360 */
+  /* ./parser//parser_prod.nit:3509 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17786,16 +18590,16 @@ void 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:3361 */
+    /* ./parser//parser_prod.nit:3510 */
     fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3361);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3510);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3363 */
+  /* ./parser//parser_prod.nit:3512 */
   fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -17811,12 +18615,12 @@ void 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:3364 */
+    /* ./parser//parser_prod.nit:3513 */
     fra.me.REG[0] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3364);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3513);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -17824,31 +18628,31 @@ void parser_prod___ABreakExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
-  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos113]) return;
+  if (init_table[itpos115]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3369;
+  fra.me.line = 3518;
   fra.me.meth = LOCATE_parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos113] = 1;
+  init_table[itpos115] = 1;
   return;
 }
 void parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int* init_table){
-  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos114]) return;
+  if (init_table[itpos116]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3371;
+  fra.me.line = 3520;
   fra.me.meth = LOCATE_parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17856,23 +18660,23 @@ void parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3375 */
+  /* ./parser//parser_prod.nit:3524 */
   CALL_parser_prod___AAbortExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3376 */
+  /* ./parser//parser_prod.nit:3525 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3376);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3525);
   }
   ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3377 */
+  /* ./parser//parser_prod.nit:3526 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3377);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3526);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos114] = 1;
+  init_table[itpos116] = 1;
   return;
 }
 void parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17882,7 +18686,7 @@ void parser_prod___AAbortExpr___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_prod;
-  fra.me.line = 3380;
+  fra.me.line = 3529;
   fra.me.meth = LOCATE_parser_prod___AAbortExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17893,11 +18697,11 @@ void parser_prod___AAbortExpr___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:3382 */
+  /* ./parser//parser_prod.nit:3531 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3382);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser_prod, 3531);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -17907,7 +18711,7 @@ void parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3383 */
+    /* ./parser//parser_prod.nit:3532 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -17922,25 +18726,25 @@ void parser_prod___AAbortExpr___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:3384 */
+      /* ./parser//parser_prod.nit:3533 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3384);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3533);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3385 */
+      /* ./parser//parser_prod.nit:3534 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwabort, ID_TKwabort)) /*cast TKwabort*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3385);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3534);
       }
-      /* ./parser//parser_prod.nit:3386 */
+      /* ./parser//parser_prod.nit:3535 */
       ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3388 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3388);
+      /* ./parser//parser_prod.nit:3537 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3537);
     }
-    /* ./parser//parser_prod.nit:3390 */
+    /* ./parser//parser_prod.nit:3539 */
     goto label1;
   }
   label1: while(0);
@@ -17953,7 +18757,7 @@ void parser_prod___AAbortExpr___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_prod;
-  fra.me.line = 3394;
+  fra.me.line = 3543;
   fra.me.meth = LOCATE_parser_prod___AAbortExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17961,11 +18765,11 @@ void 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:3396 */
+  /* ./parser//parser_prod.nit:3545 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3396);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser_prod, 3545);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -17973,32 +18777,32 @@ void parser_prod___AAbortExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table){
-  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos115]) return;
+  if (init_table[itpos117]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3400;
+  fra.me.line = 3549;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos115] = 1;
+  init_table[itpos117] = 1;
   return;
 }
 void parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_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[itpos116]) return;
+  if (init_table[itpos118]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3402;
+  fra.me.line = 3551;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18010,11 +18814,11 @@ void parser_prod___AContinueExpr___init_acontinueexpr(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:3408 */
+  /* ./parser//parser_prod.nit:3557 */
   CALL_parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3409 */
+  /* ./parser//parser_prod.nit:3558 */
   ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3410 */
+  /* ./parser//parser_prod.nit:3559 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18029,16 +18833,16 @@ void parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3411 */
+    /* ./parser//parser_prod.nit:3560 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3411);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3560);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3413 */
+  /* ./parser//parser_prod.nit:3562 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3414 */
+  /* ./parser//parser_prod.nit:3563 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18053,16 +18857,16 @@ void parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3415 */
+    /* ./parser//parser_prod.nit:3564 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3415);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3564);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3417 */
+  /* ./parser//parser_prod.nit:3566 */
   ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3418 */
+  /* ./parser//parser_prod.nit:3567 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18077,15 +18881,15 @@ void parser_prod___AContinueExpr___init_acontinueexpr(val_t p0, val_t p1, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3419 */
+    /* ./parser//parser_prod.nit:3568 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3419);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3568);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos116] = 1;
+  init_table[itpos118] = 1;
   return;
 }
 void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18095,7 +18899,7 @@ void parser_prod___AContinueExpr___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_prod;
-  fra.me.line = 3423;
+  fra.me.line = 3572;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18106,7 +18910,7 @@ void parser_prod___AContinueExpr___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:3425 */
+  /* ./parser//parser_prod.nit:3574 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18121,7 +18925,7 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3426 */
+    /* ./parser//parser_prod.nit:3575 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18136,28 +18940,28 @@ void parser_prod___AContinueExpr___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:3427 */
+      /* ./parser//parser_prod.nit:3576 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3427);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3576);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3428 */
+      /* ./parser//parser_prod.nit:3577 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3428);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3577);
       }
-      /* ./parser//parser_prod.nit:3429 */
+      /* ./parser//parser_prod.nit:3578 */
       ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3431 */
+      /* ./parser//parser_prod.nit:3580 */
       ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3433 */
+    /* ./parser//parser_prod.nit:3582 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3435 */
+  /* ./parser//parser_prod.nit:3584 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18172,7 +18976,7 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3436 */
+    /* ./parser//parser_prod.nit:3585 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18187,28 +18991,28 @@ void parser_prod___AContinueExpr___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:3437 */
+      /* ./parser//parser_prod.nit:3586 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3437);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3586);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3438 */
+      /* ./parser//parser_prod.nit:3587 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3438);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3587);
       }
-      /* ./parser//parser_prod.nit:3439 */
+      /* ./parser//parser_prod.nit:3588 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3441 */
+      /* ./parser//parser_prod.nit:3590 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3443 */
+    /* ./parser//parser_prod.nit:3592 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3445 */
+  /* ./parser//parser_prod.nit:3594 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18223,7 +19027,7 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3446 */
+    /* ./parser//parser_prod.nit:3595 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18238,25 +19042,25 @@ void parser_prod___AContinueExpr___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:3447 */
+      /* ./parser//parser_prod.nit:3596 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3447);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3596);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3448 */
+      /* ./parser//parser_prod.nit:3597 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3448);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3597);
       }
-      /* ./parser//parser_prod.nit:3449 */
+      /* ./parser//parser_prod.nit:3598 */
       ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3451 */
+      /* ./parser//parser_prod.nit:3600 */
       ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3453 */
+    /* ./parser//parser_prod.nit:3602 */
     goto label1;
   }
   label1: while(0);
@@ -18270,7 +19074,7 @@ void 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_prod;
-  fra.me.line = 3457;
+  fra.me.line = 3606;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -18279,7 +19083,7 @@ void parser_prod___AContinueExpr___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:3459 */
+  /* ./parser//parser_prod.nit:3608 */
   fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18295,16 +19099,16 @@ void 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:3460 */
+    /* ./parser//parser_prod.nit:3609 */
     fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3460);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3609);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3462 */
+  /* ./parser//parser_prod.nit:3611 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18320,16 +19124,16 @@ void 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:3463 */
+    /* ./parser//parser_prod.nit:3612 */
     fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3463);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3612);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3465 */
+  /* ./parser//parser_prod.nit:3614 */
   fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18345,12 +19149,12 @@ void 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:3466 */
+    /* ./parser//parser_prod.nit:3615 */
     fra.me.REG[0] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3466);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3615);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -18358,32 +19162,32 @@ void parser_prod___AContinueExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
-  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
+  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos117]) return;
+  if (init_table[itpos119]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3471;
+  fra.me.line = 3620;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos117] = 1;
+  init_table[itpos119] = 1;
   return;
 }
 void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
+  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].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[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3473;
+  fra.me.line = 3622;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18395,24 +19199,24 @@ void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3479 */
+  /* ./parser//parser_prod.nit:3628 */
   CALL_parser_prod___ADoExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3480 */
+  /* ./parser//parser_prod.nit:3629 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3480);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3629);
   }
   ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3481 */
+  /* ./parser//parser_prod.nit:3630 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3481);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3630);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3482 */
+  /* ./parser//parser_prod.nit:3631 */
   ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3483 */
+  /* ./parser//parser_prod.nit:3632 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18427,16 +19231,16 @@ void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3484 */
+    /* ./parser//parser_prod.nit:3633 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3484);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3633);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3486 */
+  /* ./parser//parser_prod.nit:3635 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3487 */
+  /* ./parser//parser_prod.nit:3636 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18451,15 +19255,15 @@ void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3488 */
+    /* ./parser//parser_prod.nit:3637 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3488);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3637);
     }
     CALL_parser_prod___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[itpos120] = 1;
   return;
 }
 void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18469,7 +19273,7 @@ void 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_prod;
-  fra.me.line = 3492;
+  fra.me.line = 3641;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18480,11 +19284,11 @@ void 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:3494 */
+  /* ./parser//parser_prod.nit:3643 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3494);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3643);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18494,7 +19298,7 @@ void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3495 */
+    /* ./parser//parser_prod.nit:3644 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18509,28 +19313,28 @@ void 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:3496 */
+      /* ./parser//parser_prod.nit:3645 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3496);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3645);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3497 */
+      /* ./parser//parser_prod.nit:3646 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3497);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3646);
       }
-      /* ./parser//parser_prod.nit:3498 */
+      /* ./parser//parser_prod.nit:3647 */
       ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3500 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3500);
+      /* ./parser//parser_prod.nit:3649 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3649);
     }
-    /* ./parser//parser_prod.nit:3502 */
+    /* ./parser//parser_prod.nit:3651 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3504 */
+  /* ./parser//parser_prod.nit:3653 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18545,7 +19349,7 @@ void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3505 */
+    /* ./parser//parser_prod.nit:3654 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18560,28 +19364,28 @@ void 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:3506 */
+      /* ./parser//parser_prod.nit:3655 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3506);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3655);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3507 */
+      /* ./parser//parser_prod.nit:3656 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3507);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3656);
       }
-      /* ./parser//parser_prod.nit:3508 */
+      /* ./parser//parser_prod.nit:3657 */
       ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3510 */
+      /* ./parser//parser_prod.nit:3659 */
       ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3512 */
+    /* ./parser//parser_prod.nit:3661 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3514 */
+  /* ./parser//parser_prod.nit:3663 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18596,7 +19400,7 @@ void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3515 */
+    /* ./parser//parser_prod.nit:3664 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18611,25 +19415,25 @@ void 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:3516 */
+      /* ./parser//parser_prod.nit:3665 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3516);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3665);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3517 */
+      /* ./parser//parser_prod.nit:3666 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3517);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3666);
       }
-      /* ./parser//parser_prod.nit:3518 */
+      /* ./parser//parser_prod.nit:3667 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3520 */
+      /* ./parser//parser_prod.nit:3669 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3522 */
+    /* ./parser//parser_prod.nit:3671 */
     goto label1;
   }
   label1: while(0);
@@ -18643,7 +19447,7 @@ void 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_prod;
-  fra.me.line = 3526;
+  fra.me.line = 3675;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -18652,15 +19456,15 @@ void parser_prod___ADoExpr___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:3528 */
+  /* ./parser//parser_prod.nit:3677 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3528);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3677);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3529 */
+  /* ./parser//parser_prod.nit:3678 */
   fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18676,16 +19480,16 @@ void 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:3530 */
+    /* ./parser//parser_prod.nit:3679 */
     fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3530);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3679);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3532 */
+  /* ./parser//parser_prod.nit:3681 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -18701,12 +19505,12 @@ void 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:3533 */
+    /* ./parser//parser_prod.nit:3682 */
     fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3533);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3682);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -18714,32 +19518,32 @@ void parser_prod___ADoExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
-  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos119]) return;
+  if (init_table[itpos121]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3538;
+  fra.me.line = 3687;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos119] = 1;
+  init_table[itpos121] = 1;
   return;
 }
 void parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+  int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].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[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3540;
+  fra.me.line = 3689;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -18753,37 +19557,37 @@ void parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:3547 */
+  /* ./parser//parser_prod.nit:3696 */
   CALL_parser_prod___AIfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3548 */
+  /* ./parser//parser_prod.nit:3697 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3548);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3697);
   }
   ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3549 */
+  /* ./parser//parser_prod.nit:3698 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3549);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3698);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3550 */
+  /* ./parser//parser_prod.nit:3699 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3550);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3699);
   }
   ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3551 */
+  /* ./parser//parser_prod.nit:3700 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3551);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3700);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3552 */
+  /* ./parser//parser_prod.nit:3701 */
   ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3553 */
+  /* ./parser//parser_prod.nit:3702 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18798,16 +19602,16 @@ void parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3554 */
+    /* ./parser//parser_prod.nit:3703 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3554);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3703);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3556 */
+  /* ./parser//parser_prod.nit:3705 */
   ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3557 */
+  /* ./parser//parser_prod.nit:3706 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18822,15 +19626,15 @@ void parser_prod___AIfExpr___init_aifexpr(val_t p0, val_t p1, val_t p2, val_t p3
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3558 */
+    /* ./parser//parser_prod.nit:3707 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3558);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3707);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos120] = 1;
+  init_table[itpos122] = 1;
   return;
 }
 void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18840,7 +19644,7 @@ void 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_prod;
-  fra.me.line = 3562;
+  fra.me.line = 3711;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18851,11 +19655,11 @@ void 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:3564 */
+  /* ./parser//parser_prod.nit:3713 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3564);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3713);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18865,7 +19669,7 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3565 */
+    /* ./parser//parser_prod.nit:3714 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18880,32 +19684,32 @@ void 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:3566 */
+      /* ./parser//parser_prod.nit:3715 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3566);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3715);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3567 */
+      /* ./parser//parser_prod.nit:3716 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3567);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3716);
       }
-      /* ./parser//parser_prod.nit:3568 */
+      /* ./parser//parser_prod.nit:3717 */
       ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3570 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3570);
+      /* ./parser//parser_prod.nit:3719 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3719);
     }
-    /* ./parser//parser_prod.nit:3572 */
+    /* ./parser//parser_prod.nit:3721 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3574 */
+  /* ./parser//parser_prod.nit:3723 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3574);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3723);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -18915,7 +19719,7 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3575 */
+    /* ./parser//parser_prod.nit:3724 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18930,28 +19734,28 @@ void 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:3576 */
+      /* ./parser//parser_prod.nit:3725 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3576);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3725);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3577 */
+      /* ./parser//parser_prod.nit:3726 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3577);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3726);
       }
-      /* ./parser//parser_prod.nit:3578 */
+      /* ./parser//parser_prod.nit:3727 */
       ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3580 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3580);
+      /* ./parser//parser_prod.nit:3729 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3729);
     }
-    /* ./parser//parser_prod.nit:3582 */
+    /* ./parser//parser_prod.nit:3731 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3584 */
+  /* ./parser//parser_prod.nit:3733 */
   fra.me.REG[3] = ATTR_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)) {
@@ -18966,7 +19770,7 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3585 */
+    /* ./parser//parser_prod.nit:3734 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -18981,28 +19785,28 @@ void 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:3586 */
+      /* ./parser//parser_prod.nit:3735 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3586);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3735);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3587 */
+      /* ./parser//parser_prod.nit:3736 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3587);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3736);
       }
-      /* ./parser//parser_prod.nit:3588 */
+      /* ./parser//parser_prod.nit:3737 */
       ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3590 */
+      /* ./parser//parser_prod.nit:3739 */
       ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3592 */
+    /* ./parser//parser_prod.nit:3741 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3594 */
+  /* ./parser//parser_prod.nit:3743 */
   fra.me.REG[3] = ATTR_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)) {
@@ -19017,7 +19821,7 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3595 */
+    /* ./parser//parser_prod.nit:3744 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19032,25 +19836,25 @@ void 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:3596 */
+      /* ./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_prod, 3596);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3745);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3597 */
+      /* ./parser//parser_prod.nit:3746 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3597);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3746);
       }
-      /* ./parser//parser_prod.nit:3598 */
+      /* ./parser//parser_prod.nit:3747 */
       ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3600 */
+      /* ./parser//parser_prod.nit:3749 */
       ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3602 */
+    /* ./parser//parser_prod.nit:3751 */
     goto label1;
   }
   label1: while(0);
@@ -19064,7 +19868,7 @@ void 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_prod;
-  fra.me.line = 3606;
+  fra.me.line = 3755;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19073,23 +19877,23 @@ void parser_prod___AIfExpr___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:3608 */
+  /* ./parser//parser_prod.nit:3757 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3608);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3757);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3609 */
+  /* ./parser//parser_prod.nit:3758 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3609);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3758);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3610 */
+  /* ./parser//parser_prod.nit:3759 */
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19105,16 +19909,16 @@ void 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:3611 */
+    /* ./parser//parser_prod.nit:3760 */
     fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3611);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3760);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3613 */
+  /* ./parser//parser_prod.nit:3762 */
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -19130,12 +19934,12 @@ void 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:3614 */
+    /* ./parser//parser_prod.nit:3763 */
     fra.me.REG[0] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3614);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3763);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -19143,31 +19947,31 @@ void parser_prod___AIfExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
-  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
+  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos121]) return;
+  if (init_table[itpos123]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3619;
+  fra.me.line = 3768;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos121] = 1;
+  init_table[itpos123] = 1;
   return;
 }
 void 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 itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
+  int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos122]) return;
+  if (init_table[itpos124]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3621;
+  fra.me.line = 3770;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -19185,88 +19989,88 @@ void parser_prod___AIfexprExpr___init_aifexprexpr(val_t p0, val_t p1, val_t p2,
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:3630 */
+  /* ./parser//parser_prod.nit:3779 */
   CALL_parser_prod___AIfexprExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3631 */
+  /* ./parser//parser_prod.nit:3780 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3631);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3780);
   }
   ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3632 */
+  /* ./parser//parser_prod.nit:3781 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3632);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3781);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3633 */
+  /* ./parser//parser_prod.nit:3782 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3633);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3782);
   }
   ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3634 */
+  /* ./parser//parser_prod.nit:3783 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3634);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3783);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3635 */
+  /* ./parser//parser_prod.nit:3784 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3635);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3784);
   }
   ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3636 */
+  /* ./parser//parser_prod.nit:3785 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3636);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3785);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3637 */
+  /* ./parser//parser_prod.nit:3786 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3637);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3786);
   }
   ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3638 */
+  /* ./parser//parser_prod.nit:3787 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3638);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3787);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3639 */
+  /* ./parser//parser_prod.nit:3788 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3639);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3788);
   }
   ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3640 */
+  /* ./parser//parser_prod.nit:3789 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3640);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3789);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3641 */
+  /* ./parser//parser_prod.nit:3790 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3641);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3790);
   }
   ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:3642 */
+  /* ./parser//parser_prod.nit:3791 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3642);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3791);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos122] = 1;
+  init_table[itpos124] = 1;
   return;
 }
 void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19276,7 +20080,7 @@ void parser_prod___AIfexprExpr___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_prod;
-  fra.me.line = 3645;
+  fra.me.line = 3794;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19287,11 +20091,11 @@ void parser_prod___AIfexprExpr___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:3647 */
+  /* ./parser//parser_prod.nit:3796 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3647);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3796);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19301,7 +20105,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3648 */
+    /* ./parser//parser_prod.nit:3797 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19316,32 +20120,32 @@ void parser_prod___AIfexprExpr___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:3649 */
+      /* ./parser//parser_prod.nit:3798 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3649);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3798);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3650 */
+      /* ./parser//parser_prod.nit:3799 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3650);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3799);
       }
-      /* ./parser//parser_prod.nit:3651 */
+      /* ./parser//parser_prod.nit:3800 */
       ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3653 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3653);
+      /* ./parser//parser_prod.nit:3802 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3802);
     }
-    /* ./parser//parser_prod.nit:3655 */
+    /* ./parser//parser_prod.nit:3804 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3657 */
+  /* ./parser//parser_prod.nit:3806 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3657);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3806);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19351,7 +20155,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3658 */
+    /* ./parser//parser_prod.nit:3807 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19366,32 +20170,32 @@ void parser_prod___AIfexprExpr___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:3659 */
+      /* ./parser//parser_prod.nit:3808 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3659);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3808);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3660 */
+      /* ./parser//parser_prod.nit:3809 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3660);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3809);
       }
-      /* ./parser//parser_prod.nit:3661 */
+      /* ./parser//parser_prod.nit:3810 */
       ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3663 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3663);
+      /* ./parser//parser_prod.nit:3812 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3812);
     }
-    /* ./parser//parser_prod.nit:3665 */
+    /* ./parser//parser_prod.nit:3814 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3667 */
+  /* ./parser//parser_prod.nit:3816 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3667);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser_prod, 3816);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19401,7 +20205,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3668 */
+    /* ./parser//parser_prod.nit:3817 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19416,32 +20220,32 @@ void parser_prod___AIfexprExpr___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:3669 */
+      /* ./parser//parser_prod.nit:3818 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3669);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3818);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3670 */
+      /* ./parser//parser_prod.nit:3819 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwthen, ID_TKwthen)) /*cast TKwthen*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3670);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3819);
       }
-      /* ./parser//parser_prod.nit:3671 */
+      /* ./parser//parser_prod.nit:3820 */
       ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3673 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3673);
+      /* ./parser//parser_prod.nit:3822 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3822);
     }
-    /* ./parser//parser_prod.nit:3675 */
+    /* ./parser//parser_prod.nit:3824 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3677 */
+  /* ./parser//parser_prod.nit:3826 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3677);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser_prod, 3826);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19451,7 +20255,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3678 */
+    /* ./parser//parser_prod.nit:3827 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19466,32 +20270,32 @@ void parser_prod___AIfexprExpr___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:3679 */
+      /* ./parser//parser_prod.nit:3828 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3679);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3828);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3680 */
+      /* ./parser//parser_prod.nit:3829 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3680);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3829);
       }
-      /* ./parser//parser_prod.nit:3681 */
+      /* ./parser//parser_prod.nit:3830 */
       ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3683 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3683);
+      /* ./parser//parser_prod.nit:3832 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3832);
     }
-    /* ./parser//parser_prod.nit:3685 */
+    /* ./parser//parser_prod.nit:3834 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3687 */
+  /* ./parser//parser_prod.nit:3836 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3687);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser_prod, 3836);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19501,7 +20305,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3688 */
+    /* ./parser//parser_prod.nit:3837 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19516,32 +20320,32 @@ void parser_prod___AIfexprExpr___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:3689 */
+      /* ./parser//parser_prod.nit:3838 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3689);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3838);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3690 */
+      /* ./parser//parser_prod.nit:3839 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwelse, ID_TKwelse)) /*cast TKwelse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3690);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3839);
       }
-      /* ./parser//parser_prod.nit:3691 */
+      /* ./parser//parser_prod.nit:3840 */
       ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3693 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3693);
+      /* ./parser//parser_prod.nit:3842 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3842);
     }
-    /* ./parser//parser_prod.nit:3695 */
+    /* ./parser//parser_prod.nit:3844 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3697 */
+  /* ./parser//parser_prod.nit:3846 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3697);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser_prod, 3846);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19551,7 +20355,7 @@ void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3698 */
+    /* ./parser//parser_prod.nit:3847 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19566,25 +20370,25 @@ void parser_prod___AIfexprExpr___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:3699 */
+      /* ./parser//parser_prod.nit:3848 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3699);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3848);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3700 */
+      /* ./parser//parser_prod.nit:3849 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3700);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3849);
       }
-      /* ./parser//parser_prod.nit:3701 */
+      /* ./parser//parser_prod.nit:3850 */
       ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3703 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3703);
+      /* ./parser//parser_prod.nit:3852 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3852);
     }
-    /* ./parser//parser_prod.nit:3705 */
+    /* ./parser//parser_prod.nit:3854 */
     goto label1;
   }
   label1: while(0);
@@ -19597,7 +20401,7 @@ void parser_prod___AIfexprExpr___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_prod;
-  fra.me.line = 3709;
+  fra.me.line = 3858;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19606,51 +20410,51 @@ void 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:3711 */
+  /* ./parser//parser_prod.nit:3860 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3711);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3860);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3712 */
+  /* ./parser//parser_prod.nit:3861 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3712);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3861);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3713 */
+  /* ./parser//parser_prod.nit:3862 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3713);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser_prod, 3862);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3714 */
+  /* ./parser//parser_prod.nit:3863 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3714);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser_prod, 3863);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3715 */
+  /* ./parser//parser_prod.nit:3864 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3715);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser_prod, 3864);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3716 */
+  /* ./parser//parser_prod.nit:3865 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3716);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser_prod, 3865);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -19658,32 +20462,32 @@ void parser_prod___AIfexprExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
-  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos123]) return;
+  if (init_table[itpos125]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3720;
+  fra.me.line = 3869;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos123] = 1;
+  init_table[itpos125] = 1;
   return;
 }
 void 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 itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].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[itpos124]) return;
+  if (init_table[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3722;
+  fra.me.line = 3871;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -19699,50 +20503,50 @@ void parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3730 */
+  /* ./parser//parser_prod.nit:3879 */
   CALL_parser_prod___AWhileExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3731 */
+  /* ./parser//parser_prod.nit:3880 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3731);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3880);
   }
   ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3732 */
+  /* ./parser//parser_prod.nit:3881 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3732);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3881);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3733 */
+  /* ./parser//parser_prod.nit:3882 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3733);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3882);
   }
   ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3734 */
+  /* ./parser//parser_prod.nit:3883 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3734);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3883);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3735 */
+  /* ./parser//parser_prod.nit:3884 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3735);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3884);
   }
   ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3736 */
+  /* ./parser//parser_prod.nit:3885 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3736);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3885);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3737 */
+  /* ./parser//parser_prod.nit:3886 */
   ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3738 */
+  /* ./parser//parser_prod.nit:3887 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19757,16 +20561,16 @@ void parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3739 */
+    /* ./parser//parser_prod.nit:3888 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3739);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3888);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3741 */
+  /* ./parser//parser_prod.nit:3890 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3742 */
+  /* ./parser//parser_prod.nit:3891 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -19781,15 +20585,15 @@ void parser_prod___AWhileExpr___init_awhileexpr(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3743 */
+    /* ./parser//parser_prod.nit:3892 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3743);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3892);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos124] = 1;
+  init_table[itpos126] = 1;
   return;
 }
 void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19799,7 +20603,7 @@ void parser_prod___AWhileExpr___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_prod;
-  fra.me.line = 3747;
+  fra.me.line = 3896;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19810,11 +20614,11 @@ void parser_prod___AWhileExpr___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:3749 */
+  /* ./parser//parser_prod.nit:3898 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3749);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser_prod, 3898);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19824,7 +20628,7 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3750 */
+    /* ./parser//parser_prod.nit:3899 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19839,32 +20643,32 @@ void parser_prod___AWhileExpr___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:3751 */
+      /* ./parser//parser_prod.nit:3900 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3751);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3900);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3752 */
+      /* ./parser//parser_prod.nit:3901 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwhile, ID_TKwwhile)) /*cast TKwwhile*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3752);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3901);
       }
-      /* ./parser//parser_prod.nit:3753 */
+      /* ./parser//parser_prod.nit:3902 */
       ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3755 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3755);
+      /* ./parser//parser_prod.nit:3904 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3904);
     }
-    /* ./parser//parser_prod.nit:3757 */
+    /* ./parser//parser_prod.nit:3906 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3759 */
+  /* ./parser//parser_prod.nit:3908 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3759);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3908);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19874,7 +20678,7 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3760 */
+    /* ./parser//parser_prod.nit:3909 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19889,32 +20693,32 @@ void parser_prod___AWhileExpr___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:3761 */
+      /* ./parser//parser_prod.nit:3910 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3761);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3910);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3762 */
+      /* ./parser//parser_prod.nit:3911 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3762);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3911);
       }
-      /* ./parser//parser_prod.nit:3763 */
+      /* ./parser//parser_prod.nit:3912 */
       ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3765 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3765);
+      /* ./parser//parser_prod.nit:3914 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3914);
     }
-    /* ./parser//parser_prod.nit:3767 */
+    /* ./parser//parser_prod.nit:3916 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3769 */
+  /* ./parser//parser_prod.nit:3918 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3769);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3918);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -19924,7 +20728,7 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3770 */
+    /* ./parser//parser_prod.nit:3919 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19939,28 +20743,28 @@ void parser_prod___AWhileExpr___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:3771 */
+      /* ./parser//parser_prod.nit:3920 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3771);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3920);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3772 */
+      /* ./parser//parser_prod.nit:3921 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3772);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3921);
       }
-      /* ./parser//parser_prod.nit:3773 */
+      /* ./parser//parser_prod.nit:3922 */
       ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3775 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3775);
+      /* ./parser//parser_prod.nit:3924 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3924);
     }
-    /* ./parser//parser_prod.nit:3777 */
+    /* ./parser//parser_prod.nit:3926 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3779 */
+  /* ./parser//parser_prod.nit:3928 */
   fra.me.REG[3] = ATTR_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)) {
@@ -19975,7 +20779,7 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3780 */
+    /* ./parser//parser_prod.nit:3929 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -19990,28 +20794,28 @@ void parser_prod___AWhileExpr___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:3781 */
+      /* ./parser//parser_prod.nit:3930 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3781);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3930);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3782 */
+      /* ./parser//parser_prod.nit:3931 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3782);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3931);
       }
-      /* ./parser//parser_prod.nit:3783 */
+      /* ./parser//parser_prod.nit:3932 */
       ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3785 */
+      /* ./parser//parser_prod.nit:3934 */
       ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3787 */
+    /* ./parser//parser_prod.nit:3936 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3789 */
+  /* ./parser//parser_prod.nit:3938 */
   fra.me.REG[3] = ATTR_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)) {
@@ -20026,7 +20830,7 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3790 */
+    /* ./parser//parser_prod.nit:3939 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20041,25 +20845,25 @@ void parser_prod___AWhileExpr___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:3791 */
+      /* ./parser//parser_prod.nit:3940 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3791);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3940);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3792 */
+      /* ./parser//parser_prod.nit:3941 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3792);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3941);
       }
-      /* ./parser//parser_prod.nit:3793 */
+      /* ./parser//parser_prod.nit:3942 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3795 */
+      /* ./parser//parser_prod.nit:3944 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3797 */
+    /* ./parser//parser_prod.nit:3946 */
     goto label1;
   }
   label1: while(0);
@@ -20073,7 +20877,7 @@ void 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_prod;
-  fra.me.line = 3801;
+  fra.me.line = 3950;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -20082,31 +20886,31 @@ void parser_prod___AWhileExpr___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:3803 */
+  /* ./parser//parser_prod.nit:3952 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3803);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser_prod, 3952);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3804 */
+  /* ./parser//parser_prod.nit:3953 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3804);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3953);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3805 */
+  /* ./parser//parser_prod.nit:3954 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3805);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3954);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3806 */
+  /* ./parser//parser_prod.nit:3955 */
   fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20122,16 +20926,16 @@ void 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:3807 */
+    /* ./parser//parser_prod.nit:3956 */
     fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3807);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3956);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3809 */
+  /* ./parser//parser_prod.nit:3958 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20147,12 +20951,12 @@ void 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:3810 */
+    /* ./parser//parser_prod.nit:3959 */
     fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3810);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3959);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -20160,32 +20964,32 @@ void parser_prod___AWhileExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
-  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
+  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos125]) return;
+  if (init_table[itpos127]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3815;
+  fra.me.line = 3964;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos125] = 1;
+  init_table[itpos127] = 1;
   return;
 }
 void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
+  int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].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[itpos126]) return;
+  if (init_table[itpos128]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3817;
+  fra.me.line = 3966;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20197,24 +21001,24 @@ void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3823 */
+  /* ./parser//parser_prod.nit:3972 */
   CALL_parser_prod___ALoopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3824 */
+  /* ./parser//parser_prod.nit:3973 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3824);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3973);
   }
   ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3825 */
+  /* ./parser//parser_prod.nit:3974 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3825);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3974);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3826 */
+  /* ./parser//parser_prod.nit:3975 */
   ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3827 */
+  /* ./parser//parser_prod.nit:3976 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20229,16 +21033,16 @@ void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3828 */
+    /* ./parser//parser_prod.nit:3977 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3828);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3977);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3830 */
+  /* ./parser//parser_prod.nit:3979 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3831 */
+  /* ./parser//parser_prod.nit:3980 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20253,15 +21057,15 @@ void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3832 */
+    /* ./parser//parser_prod.nit:3981 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3832);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3981);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos126] = 1;
+  init_table[itpos128] = 1;
   return;
 }
 void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -20271,7 +21075,7 @@ void parser_prod___ALoopExpr___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_prod;
-  fra.me.line = 3836;
+  fra.me.line = 3985;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20282,11 +21086,11 @@ void parser_prod___ALoopExpr___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:3838 */
+  /* ./parser//parser_prod.nit:3987 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3838);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser_prod, 3987);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20296,7 +21100,7 @@ void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3839 */
+    /* ./parser//parser_prod.nit:3988 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20311,28 +21115,28 @@ void parser_prod___ALoopExpr___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:3840 */
+      /* ./parser//parser_prod.nit:3989 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3840);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3989);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3841 */
+      /* ./parser//parser_prod.nit:3990 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast TKwloop*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3841);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3990);
       }
-      /* ./parser//parser_prod.nit:3842 */
+      /* ./parser//parser_prod.nit:3991 */
       ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3844 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3844);
+      /* ./parser//parser_prod.nit:3993 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3993);
     }
-    /* ./parser//parser_prod.nit:3846 */
+    /* ./parser//parser_prod.nit:3995 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3848 */
+  /* ./parser//parser_prod.nit:3997 */
   fra.me.REG[3] = ATTR_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)) {
@@ -20347,7 +21151,7 @@ void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3849 */
+    /* ./parser//parser_prod.nit:3998 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20362,28 +21166,28 @@ void parser_prod___ALoopExpr___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:3850 */
+      /* ./parser//parser_prod.nit:3999 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3850);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3999);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3851 */
+      /* ./parser//parser_prod.nit:4000 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3851);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4000);
       }
-      /* ./parser//parser_prod.nit:3852 */
+      /* ./parser//parser_prod.nit:4001 */
       ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3854 */
+      /* ./parser//parser_prod.nit:4003 */
       ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3856 */
+    /* ./parser//parser_prod.nit:4005 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3858 */
+  /* ./parser//parser_prod.nit:4007 */
   fra.me.REG[3] = ATTR_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)) {
@@ -20398,7 +21202,7 @@ void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3859 */
+    /* ./parser//parser_prod.nit:4008 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20413,25 +21217,25 @@ void parser_prod___ALoopExpr___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:3860 */
+      /* ./parser//parser_prod.nit:4009 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3860);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4009);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3861 */
+      /* ./parser//parser_prod.nit:4010 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3861);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4010);
       }
-      /* ./parser//parser_prod.nit:3862 */
+      /* ./parser//parser_prod.nit:4011 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3864 */
+      /* ./parser//parser_prod.nit:4013 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3866 */
+    /* ./parser//parser_prod.nit:4015 */
     goto label1;
   }
   label1: while(0);
@@ -20445,7 +21249,7 @@ void 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_prod;
-  fra.me.line = 3870;
+  fra.me.line = 4019;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -20454,15 +21258,15 @@ void parser_prod___ALoopExpr___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:3872 */
+  /* ./parser//parser_prod.nit:4021 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3872);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser_prod, 4021);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3873 */
+  /* ./parser//parser_prod.nit:4022 */
   fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20478,16 +21282,16 @@ void 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:3874 */
+    /* ./parser//parser_prod.nit:4023 */
     fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3874);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4023);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3876 */
+  /* ./parser//parser_prod.nit:4025 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -20503,12 +21307,12 @@ void 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:3877 */
+    /* ./parser//parser_prod.nit:4026 */
     fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3877);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4026);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -20516,32 +21320,32 @@ void parser_prod___ALoopExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
-  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
+  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos127]) return;
+  if (init_table[itpos129]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3882;
+  fra.me.line = 4031;
   fra.me.meth = LOCATE_parser_prod___AForExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos127] = 1;
+  init_table[itpos129] = 1;
   return;
 }
 void 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 itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
+  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].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[itpos128]) return;
+  if (init_table[itpos130]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3884;
+  fra.me.line = 4033;
   fra.me.meth = LOCATE_parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -20559,63 +21363,63 @@ void parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p2, val_t
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:3893 */
+  /* ./parser//parser_prod.nit:4042 */
   CALL_parser_prod___AForExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3894 */
+  /* ./parser//parser_prod.nit:4043 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3894);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4043);
   }
   ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3895 */
+  /* ./parser//parser_prod.nit:4044 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3895);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4044);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3896 */
+  /* ./parser//parser_prod.nit:4045 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3896);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4045);
   }
   ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:3897 */
+  /* ./parser//parser_prod.nit:4046 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3897);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4046);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3898 */
+  /* ./parser//parser_prod.nit:4047 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3898);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4047);
   }
   ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:3899 */
+  /* ./parser//parser_prod.nit:4048 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3899);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4048);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3900 */
+  /* ./parser//parser_prod.nit:4049 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3900);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4049);
   }
   ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:3901 */
+  /* ./parser//parser_prod.nit:4050 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3901);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4050);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3902 */
+  /* ./parser//parser_prod.nit:4051 */
   ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:3903 */
+  /* ./parser//parser_prod.nit:4052 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20630,16 +21434,16 @@ void parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p2, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3904 */
+    /* ./parser//parser_prod.nit:4053 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3904);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4053);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3906 */
+  /* ./parser//parser_prod.nit:4055 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:3907 */
+  /* ./parser//parser_prod.nit:4056 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -20654,15 +21458,15 @@ void parser_prod___AForExpr___init_aforexpr(val_t p0, val_t p1, val_t p2, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3908 */
+    /* ./parser//parser_prod.nit:4057 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3908);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4057);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos128] = 1;
+  init_table[itpos130] = 1;
   return;
 }
 void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -20672,7 +21476,7 @@ void parser_prod___AForExpr___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_prod;
-  fra.me.line = 3912;
+  fra.me.line = 4061;
   fra.me.meth = LOCATE_parser_prod___AForExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -20683,11 +21487,11 @@ void parser_prod___AForExpr___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:3914 */
+  /* ./parser//parser_prod.nit:4063 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3914);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser_prod, 4063);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20697,7 +21501,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3915 */
+    /* ./parser//parser_prod.nit:4064 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20712,32 +21516,32 @@ void parser_prod___AForExpr___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:3916 */
+      /* ./parser//parser_prod.nit:4065 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3916);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4065);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3917 */
+      /* ./parser//parser_prod.nit:4066 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfor, ID_TKwfor)) /*cast TKwfor*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3917);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4066);
       }
-      /* ./parser//parser_prod.nit:3918 */
+      /* ./parser//parser_prod.nit:4067 */
       ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3920 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3920);
+      /* ./parser//parser_prod.nit:4069 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4069);
     }
-    /* ./parser//parser_prod.nit:3922 */
+    /* ./parser//parser_prod.nit:4071 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3924 */
+  /* ./parser//parser_prod.nit:4073 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3924);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 4073);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20747,7 +21551,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3925 */
+    /* ./parser//parser_prod.nit:4074 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20762,32 +21566,32 @@ void parser_prod___AForExpr___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:3926 */
+      /* ./parser//parser_prod.nit:4075 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3926);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4075);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3927 */
+      /* ./parser//parser_prod.nit:4076 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3927);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4076);
       }
-      /* ./parser//parser_prod.nit:3928 */
+      /* ./parser//parser_prod.nit:4077 */
       ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3930 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3930);
+      /* ./parser//parser_prod.nit:4079 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4079);
     }
-    /* ./parser//parser_prod.nit:3932 */
+    /* ./parser//parser_prod.nit:4081 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3934 */
+  /* ./parser//parser_prod.nit:4083 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3934);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4083);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20797,7 +21601,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3935 */
+    /* ./parser//parser_prod.nit:4084 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20812,32 +21616,32 @@ void parser_prod___AForExpr___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:3936 */
+      /* ./parser//parser_prod.nit:4085 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3936);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4085);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3937 */
+      /* ./parser//parser_prod.nit:4086 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3937);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4086);
       }
-      /* ./parser//parser_prod.nit:3938 */
+      /* ./parser//parser_prod.nit:4087 */
       ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3940 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3940);
+      /* ./parser//parser_prod.nit:4089 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4089);
     }
-    /* ./parser//parser_prod.nit:3942 */
+    /* ./parser//parser_prod.nit:4091 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3944 */
+  /* ./parser//parser_prod.nit:4093 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3944);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 4093);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -20847,7 +21651,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3945 */
+    /* ./parser//parser_prod.nit:4094 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20862,28 +21666,28 @@ void parser_prod___AForExpr___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:3946 */
+      /* ./parser//parser_prod.nit:4095 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3946);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4095);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3947 */
+      /* ./parser//parser_prod.nit:4096 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3947);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4096);
       }
-      /* ./parser//parser_prod.nit:3948 */
+      /* ./parser//parser_prod.nit:4097 */
       ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3950 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3950);
+      /* ./parser//parser_prod.nit:4099 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4099);
     }
-    /* ./parser//parser_prod.nit:3952 */
+    /* ./parser//parser_prod.nit:4101 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3954 */
+  /* ./parser//parser_prod.nit:4103 */
   fra.me.REG[3] = ATTR_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)) {
@@ -20898,7 +21702,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3955 */
+    /* ./parser//parser_prod.nit:4104 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20913,28 +21717,28 @@ void parser_prod___AForExpr___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:3956 */
+      /* ./parser//parser_prod.nit:4105 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3956);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4105);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3957 */
+      /* ./parser//parser_prod.nit:4106 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3957);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4106);
       }
-      /* ./parser//parser_prod.nit:3958 */
+      /* ./parser//parser_prod.nit:4107 */
       ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3960 */
+      /* ./parser//parser_prod.nit:4109 */
       ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3962 */
+    /* ./parser//parser_prod.nit:4111 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:3964 */
+  /* ./parser//parser_prod.nit:4113 */
   fra.me.REG[3] = ATTR_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)) {
@@ -20949,7 +21753,7 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:3965 */
+    /* ./parser//parser_prod.nit:4114 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -20964,25 +21768,25 @@ void parser_prod___AForExpr___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:3966 */
+      /* ./parser//parser_prod.nit:4115 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3966);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4115);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3967 */
+      /* ./parser//parser_prod.nit:4116 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3967);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4116);
       }
-      /* ./parser//parser_prod.nit:3968 */
+      /* ./parser//parser_prod.nit:4117 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3970 */
+      /* ./parser//parser_prod.nit:4119 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3972 */
+    /* ./parser//parser_prod.nit:4121 */
     goto label1;
   }
   label1: while(0);
@@ -20996,7 +21800,7 @@ void 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_prod;
-  fra.me.line = 3976;
+  fra.me.line = 4125;
   fra.me.meth = LOCATE_parser_prod___AForExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21005,39 +21809,39 @@ void parser_prod___AForExpr___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:3978 */
+  /* ./parser//parser_prod.nit:4127 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3978);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser_prod, 4127);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3979 */
+  /* ./parser//parser_prod.nit:4128 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3979);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 4128);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3980 */
+  /* ./parser//parser_prod.nit:4129 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3980);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4129);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3981 */
+  /* ./parser//parser_prod.nit:4130 */
   REGB0 = TAG_Bool(ATTR_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_prod, 3981);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 4130);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3982 */
+  /* ./parser//parser_prod.nit:4131 */
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21053,16 +21857,16 @@ void 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:3983 */
+    /* ./parser//parser_prod.nit:4132 */
     fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3983);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4132);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:3985 */
+  /* ./parser//parser_prod.nit:4134 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21078,12 +21882,12 @@ void 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:3986 */
+    /* ./parser//parser_prod.nit:4135 */
     fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3986);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4135);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -21091,32 +21895,32 @@ void parser_prod___AForExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
-  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos129]) return;
+  if (init_table[itpos131]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3991;
+  fra.me.line = 4140;
   fra.me.meth = LOCATE_parser_prod___AAssertExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos129] = 1;
+  init_table[itpos131] = 1;
   return;
 }
 void parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].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[itpos130]) return;
+  if (init_table[itpos132]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3993;
+  fra.me.line = 4142;
   fra.me.meth = LOCATE_parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -21130,24 +21934,24 @@ void parser_prod___AAssertExpr___init_aassertexpr(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:4000 */
+  /* ./parser//parser_prod.nit:4149 */
   CALL_parser_prod___AAssertExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4001 */
+  /* ./parser//parser_prod.nit:4150 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4001);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4150);
   }
   ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4002 */
+  /* ./parser//parser_prod.nit:4151 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4002);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4151);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4003 */
+  /* ./parser//parser_prod.nit:4152 */
   ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4004 */
+  /* ./parser//parser_prod.nit:4153 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21162,29 +21966,29 @@ void parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4005 */
+    /* ./parser//parser_prod.nit:4154 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4005);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4154);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:4007 */
+  /* ./parser//parser_prod.nit:4156 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4007);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4156);
   }
   ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:4008 */
+  /* ./parser//parser_prod.nit:4157 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4008);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4157);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4009 */
+  /* ./parser//parser_prod.nit:4158 */
   ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:4010 */
+  /* ./parser//parser_prod.nit:4159 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -21199,15 +22003,15 @@ void parser_prod___AAssertExpr___init_aassertexpr(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4011 */
+    /* ./parser//parser_prod.nit:4160 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4011);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4160);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos130] = 1;
+  init_table[itpos132] = 1;
   return;
 }
 void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21217,7 +22021,7 @@ void parser_prod___AAssertExpr___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_prod;
-  fra.me.line = 4015;
+  fra.me.line = 4164;
   fra.me.meth = LOCATE_parser_prod___AAssertExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21228,11 +22032,11 @@ void parser_prod___AAssertExpr___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:4017 */
+  /* ./parser//parser_prod.nit:4166 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4017);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser_prod, 4166);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21242,7 +22046,7 @@ void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4018 */
+    /* ./parser//parser_prod.nit:4167 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21257,28 +22061,28 @@ void parser_prod___AAssertExpr___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:4019 */
+      /* ./parser//parser_prod.nit:4168 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4019);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4168);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4020 */
+      /* ./parser//parser_prod.nit:4169 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwassert, ID_TKwassert)) /*cast TKwassert*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4020);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4169);
       }
-      /* ./parser//parser_prod.nit:4021 */
+      /* ./parser//parser_prod.nit:4170 */
       ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4023 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4023);
+      /* ./parser//parser_prod.nit:4172 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4172);
     }
-    /* ./parser//parser_prod.nit:4025 */
+    /* ./parser//parser_prod.nit:4174 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4027 */
+  /* ./parser//parser_prod.nit:4176 */
   fra.me.REG[3] = ATTR_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)) {
@@ -21293,7 +22097,7 @@ void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4028 */
+    /* ./parser//parser_prod.nit:4177 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21308,32 +22112,32 @@ void parser_prod___AAssertExpr___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:4029 */
+      /* ./parser//parser_prod.nit:4178 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4029);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4178);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4030 */
+      /* ./parser//parser_prod.nit:4179 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4030);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4179);
       }
-      /* ./parser//parser_prod.nit:4031 */
+      /* ./parser//parser_prod.nit:4180 */
       ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4033 */
+      /* ./parser//parser_prod.nit:4182 */
       ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4035 */
+    /* ./parser//parser_prod.nit:4184 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4037 */
+  /* ./parser//parser_prod.nit:4186 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4037);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4186);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21343,7 +22147,7 @@ void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4038 */
+    /* ./parser//parser_prod.nit:4187 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21358,28 +22162,28 @@ void parser_prod___AAssertExpr___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:4039 */
+      /* ./parser//parser_prod.nit:4188 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4039);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4188);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4040 */
+      /* ./parser//parser_prod.nit:4189 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4040);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4189);
       }
-      /* ./parser//parser_prod.nit:4041 */
+      /* ./parser//parser_prod.nit:4190 */
       ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4043 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4043);
+      /* ./parser//parser_prod.nit:4192 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4192);
     }
-    /* ./parser//parser_prod.nit:4045 */
+    /* ./parser//parser_prod.nit:4194 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4047 */
+  /* ./parser//parser_prod.nit:4196 */
   fra.me.REG[3] = ATTR_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)) {
@@ -21394,7 +22198,7 @@ void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4048 */
+    /* ./parser//parser_prod.nit:4197 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21409,25 +22213,25 @@ void parser_prod___AAssertExpr___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:4049 */
+      /* ./parser//parser_prod.nit:4198 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4049);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4198);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4050 */
+      /* ./parser//parser_prod.nit:4199 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4050);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4199);
       }
-      /* ./parser//parser_prod.nit:4051 */
+      /* ./parser//parser_prod.nit:4200 */
       ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4053 */
+      /* ./parser//parser_prod.nit:4202 */
       ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4055 */
+    /* ./parser//parser_prod.nit:4204 */
     goto label1;
   }
   label1: while(0);
@@ -21441,7 +22245,7 @@ void 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_prod;
-  fra.me.line = 4059;
+  fra.me.line = 4208;
   fra.me.meth = LOCATE_parser_prod___AAssertExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21450,15 +22254,15 @@ void parser_prod___AAssertExpr___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:4061 */
+  /* ./parser//parser_prod.nit:4210 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4061);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser_prod, 4210);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4062 */
+  /* ./parser//parser_prod.nit:4211 */
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21474,24 +22278,24 @@ void 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:4063 */
+    /* ./parser//parser_prod.nit:4212 */
     fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4063);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4212);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:4065 */
+  /* ./parser//parser_prod.nit:4214 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4065);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4214);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4066 */
+  /* ./parser//parser_prod.nit:4215 */
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -21507,12 +22311,12 @@ void 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:4067 */
+    /* ./parser//parser_prod.nit:4216 */
     fra.me.REG[0] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4067);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4216);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -21520,31 +22324,31 @@ void parser_prod___AAssertExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
-  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
+  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos131]) return;
+  if (init_table[itpos133]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4072;
+  fra.me.line = 4221;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos131] = 1;
+  init_table[itpos133] = 1;
   return;
 }
 void parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
+  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos132]) return;
+  if (init_table[itpos134]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4074;
+  fra.me.line = 4223;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21554,36 +22358,36 @@ void parser_prod___AOnceExpr___init_aonceexpr(val_t p0, val_t p1, val_t p2, int*
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4079 */
+  /* ./parser//parser_prod.nit:4228 */
   CALL_parser_prod___AOnceExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4080 */
+  /* ./parser//parser_prod.nit:4229 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4080);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4229);
   }
   ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4081 */
+  /* ./parser//parser_prod.nit:4230 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4081);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4230);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4082 */
+  /* ./parser//parser_prod.nit:4231 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4082);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4231);
   }
   ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4083 */
+  /* ./parser//parser_prod.nit:4232 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4083);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4232);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos132] = 1;
+  init_table[itpos134] = 1;
   return;
 }
 void parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21593,7 +22397,7 @@ void parser_prod___AOnceExpr___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_prod;
-  fra.me.line = 4086;
+  fra.me.line = 4235;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21604,11 +22408,11 @@ void parser_prod___AOnceExpr___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:4088 */
+  /* ./parser//parser_prod.nit:4237 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4088);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser_prod, 4237);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21618,7 +22422,7 @@ void parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4089 */
+    /* ./parser//parser_prod.nit:4238 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21633,32 +22437,32 @@ void parser_prod___AOnceExpr___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:4090 */
+      /* ./parser//parser_prod.nit:4239 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4090);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4239);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4091 */
+      /* ./parser//parser_prod.nit:4240 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwonce, ID_TKwonce)) /*cast TKwonce*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4091);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4240);
       }
-      /* ./parser//parser_prod.nit:4092 */
+      /* ./parser//parser_prod.nit:4241 */
       ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4094 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4094);
+      /* ./parser//parser_prod.nit:4243 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4243);
     }
-    /* ./parser//parser_prod.nit:4096 */
+    /* ./parser//parser_prod.nit:4245 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4098 */
+  /* ./parser//parser_prod.nit:4247 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4098);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4247);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21668,7 +22472,7 @@ void parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4099 */
+    /* ./parser//parser_prod.nit:4248 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21683,25 +22487,25 @@ void parser_prod___AOnceExpr___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:4100 */
+      /* ./parser//parser_prod.nit:4249 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4100);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4249);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4101 */
+      /* ./parser//parser_prod.nit:4250 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4101);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4250);
       }
-      /* ./parser//parser_prod.nit:4102 */
+      /* ./parser//parser_prod.nit:4251 */
       ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4104 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4104);
+      /* ./parser//parser_prod.nit:4253 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4253);
     }
-    /* ./parser//parser_prod.nit:4106 */
+    /* ./parser//parser_prod.nit:4255 */
     goto label1;
   }
   label1: while(0);
@@ -21714,7 +22518,7 @@ void parser_prod___AOnceExpr___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_prod;
-  fra.me.line = 4110;
+  fra.me.line = 4259;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21723,19 +22527,19 @@ void 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:4112 */
+  /* ./parser//parser_prod.nit:4261 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4112);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser_prod, 4261);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4113 */
+  /* ./parser//parser_prod.nit:4262 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4113);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4262);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -21743,31 +22547,31 @@ void parser_prod___AOnceExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
-  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
+  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos133]) return;
+  if (init_table[itpos135]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4117;
+  fra.me.line = 4266;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos133] = 1;
+  init_table[itpos135] = 1;
   return;
 }
 void parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int* init_table){
-  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
+  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos134]) return;
+  if (init_table[itpos136]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4119;
+  fra.me.line = 4268;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21775,23 +22579,23 @@ void parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4123 */
+  /* ./parser//parser_prod.nit:4272 */
   CALL_parser_prod___ASendExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4124 */
+  /* ./parser//parser_prod.nit:4273 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4124);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4273);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4125 */
+  /* ./parser//parser_prod.nit:4274 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4125);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4274);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos134] = 1;
+  init_table[itpos136] = 1;
   return;
 }
 void parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21801,7 +22605,7 @@ void parser_prod___ASendExpr___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_prod;
-  fra.me.line = 4128;
+  fra.me.line = 4277;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21812,11 +22616,11 @@ void parser_prod___ASendExpr___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:4130 */
+  /* ./parser//parser_prod.nit:4279 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4130);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4279);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21826,7 +22630,7 @@ void parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4131 */
+    /* ./parser//parser_prod.nit:4280 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -21841,25 +22645,25 @@ void parser_prod___ASendExpr___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:4132 */
+      /* ./parser//parser_prod.nit:4281 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4132);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4281);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4133 */
+      /* ./parser//parser_prod.nit:4282 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4133);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4282);
       }
-      /* ./parser//parser_prod.nit:4134 */
+      /* ./parser//parser_prod.nit:4283 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4136 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4136);
+      /* ./parser//parser_prod.nit:4285 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4285);
     }
-    /* ./parser//parser_prod.nit:4138 */
+    /* ./parser//parser_prod.nit:4287 */
     goto label1;
   }
   label1: while(0);
@@ -21872,7 +22676,7 @@ void parser_prod___ASendExpr___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_prod;
-  fra.me.line = 4142;
+  fra.me.line = 4291;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -21880,11 +22684,11 @@ void 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:4144 */
+  /* ./parser//parser_prod.nit:4293 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4144);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4293);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -21892,31 +22696,31 @@ void parser_prod___ASendExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
-  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos135]) return;
+  if (init_table[itpos137]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4148;
+  fra.me.line = 4297;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos135] = 1;
+  init_table[itpos137] = 1;
   return;
 }
 void parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].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[itpos138]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4150;
+  fra.me.line = 4299;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___init_abinopexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21926,36 +22730,36 @@ void parser_prod___ABinopExpr___init_abinopexpr(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4155 */
+  /* ./parser//parser_prod.nit:4304 */
   CALL_parser_prod___ABinopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4156 */
+  /* ./parser//parser_prod.nit:4305 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4156);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4305);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4157 */
+  /* ./parser//parser_prod.nit:4306 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4157);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4306);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4158 */
+  /* ./parser//parser_prod.nit:4307 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4158);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4307);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4159 */
+  /* ./parser//parser_prod.nit:4308 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4159);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4308);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos136] = 1;
+  init_table[itpos138] = 1;
   return;
 }
 void parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21965,7 +22769,7 @@ void parser_prod___ABinopExpr___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_prod;
-  fra.me.line = 4162;
+  fra.me.line = 4311;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21976,11 +22780,11 @@ void parser_prod___ABinopExpr___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:4164 */
+  /* ./parser//parser_prod.nit:4313 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4164);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4313);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -21990,7 +22794,7 @@ void parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4165 */
+    /* ./parser//parser_prod.nit:4314 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22005,32 +22809,32 @@ void parser_prod___ABinopExpr___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:4166 */
+      /* ./parser//parser_prod.nit:4315 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4166);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4315);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4167 */
+      /* ./parser//parser_prod.nit:4316 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4167);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4316);
       }
-      /* ./parser//parser_prod.nit:4168 */
+      /* ./parser//parser_prod.nit:4317 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4170 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4170);
+      /* ./parser//parser_prod.nit:4319 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4319);
     }
-    /* ./parser//parser_prod.nit:4172 */
+    /* ./parser//parser_prod.nit:4321 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4174 */
+  /* ./parser//parser_prod.nit:4323 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4174);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4323);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22040,7 +22844,7 @@ void parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4175 */
+    /* ./parser//parser_prod.nit:4324 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22055,25 +22859,25 @@ void parser_prod___ABinopExpr___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:4176 */
+      /* ./parser//parser_prod.nit:4325 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4176);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4325);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4177 */
+      /* ./parser//parser_prod.nit:4326 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4177);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4326);
       }
-      /* ./parser//parser_prod.nit:4178 */
+      /* ./parser//parser_prod.nit:4327 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4180 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4180);
+      /* ./parser//parser_prod.nit:4329 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4329);
     }
-    /* ./parser//parser_prod.nit:4182 */
+    /* ./parser//parser_prod.nit:4331 */
     goto label1;
   }
   label1: while(0);
@@ -22086,7 +22890,7 @@ void parser_prod___ABinopExpr___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_prod;
-  fra.me.line = 4186;
+  fra.me.line = 4335;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22095,19 +22899,19 @@ void 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:4188 */
+  /* ./parser//parser_prod.nit:4337 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4188);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4337);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4189 */
+  /* ./parser//parser_prod.nit:4338 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4189);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4338);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -22115,31 +22919,31 @@ void parser_prod___ABinopExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
-  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos137]) return;
+  if (init_table[itpos139]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4193;
+  fra.me.line = 4342;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos137] = 1;
+  init_table[itpos139] = 1;
   return;
 }
 void parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos138]) return;
+  if (init_table[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4195;
+  fra.me.line = 4344;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22149,36 +22953,36 @@ void parser_prod___AOrExpr___init_aorexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4200 */
+  /* ./parser//parser_prod.nit:4349 */
   CALL_parser_prod___AOrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4201 */
+  /* ./parser//parser_prod.nit:4350 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4201);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4350);
   }
   ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4202 */
+  /* ./parser//parser_prod.nit:4351 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4202);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4351);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4203 */
+  /* ./parser//parser_prod.nit:4352 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4203);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4352);
   }
   ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4204 */
+  /* ./parser//parser_prod.nit:4353 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4204);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4353);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos138] = 1;
+  init_table[itpos140] = 1;
   return;
 }
 void parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -22188,7 +22992,7 @@ void 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_prod;
-  fra.me.line = 4207;
+  fra.me.line = 4356;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22199,11 +23003,11 @@ void 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:4209 */
+  /* ./parser//parser_prod.nit:4358 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4209);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4358);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22213,7 +23017,7 @@ void parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4210 */
+    /* ./parser//parser_prod.nit:4359 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22228,32 +23032,32 @@ void 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:4211 */
+      /* ./parser//parser_prod.nit:4360 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4211);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4360);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4212 */
+      /* ./parser//parser_prod.nit:4361 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4212);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4361);
       }
-      /* ./parser//parser_prod.nit:4213 */
+      /* ./parser//parser_prod.nit:4362 */
       ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4215 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4215);
+      /* ./parser//parser_prod.nit:4364 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4364);
     }
-    /* ./parser//parser_prod.nit:4217 */
+    /* ./parser//parser_prod.nit:4366 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4219 */
+  /* ./parser//parser_prod.nit:4368 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4219);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4368);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22263,7 +23067,7 @@ void parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4220 */
+    /* ./parser//parser_prod.nit:4369 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22278,25 +23082,25 @@ void 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:4221 */
+      /* ./parser//parser_prod.nit:4370 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4221);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4370);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4222 */
+      /* ./parser//parser_prod.nit:4371 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4222);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4371);
       }
-      /* ./parser//parser_prod.nit:4223 */
+      /* ./parser//parser_prod.nit:4372 */
       ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4225 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4225);
+      /* ./parser//parser_prod.nit:4374 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4374);
     }
-    /* ./parser//parser_prod.nit:4227 */
+    /* ./parser//parser_prod.nit:4376 */
     goto label1;
   }
   label1: while(0);
@@ -22309,7 +23113,7 @@ void parser_prod___AOrExpr___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_prod;
-  fra.me.line = 4231;
+  fra.me.line = 4380;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22318,19 +23122,19 @@ void 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:4233 */
+  /* ./parser//parser_prod.nit:4382 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4233);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4382);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4234 */
+  /* ./parser//parser_prod.nit:4383 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4234);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4383);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -22338,31 +23142,31 @@ void parser_prod___AOrExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
-  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos139]) return;
+  if (init_table[itpos141]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4238;
+  fra.me.line = 4387;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos139] = 1;
+  init_table[itpos141] = 1;
   return;
 }
 void parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos140]) return;
+  if (init_table[itpos142]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4240;
+  fra.me.line = 4389;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22372,36 +23176,36 @@ void parser_prod___AAndExpr___init_aandexpr(val_t p0, val_t p1, val_t p2, int* i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4245 */
+  /* ./parser//parser_prod.nit:4394 */
   CALL_parser_prod___AAndExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4246 */
+  /* ./parser//parser_prod.nit:4395 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4246);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4395);
   }
   ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4247 */
+  /* ./parser//parser_prod.nit:4396 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4247);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4396);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4248 */
+  /* ./parser//parser_prod.nit:4397 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4248);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4397);
   }
   ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4249 */
+  /* ./parser//parser_prod.nit:4398 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4249);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4398);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos140] = 1;
+  init_table[itpos142] = 1;
   return;
 }
 void parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -22411,7 +23215,7 @@ void parser_prod___AAndExpr___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_prod;
-  fra.me.line = 4252;
+  fra.me.line = 4401;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22422,11 +23226,11 @@ void parser_prod___AAndExpr___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:4254 */
+  /* ./parser//parser_prod.nit:4403 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4254);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4403);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22436,7 +23240,7 @@ void parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4255 */
+    /* ./parser//parser_prod.nit:4404 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22451,32 +23255,32 @@ void parser_prod___AAndExpr___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:4256 */
+      /* ./parser//parser_prod.nit:4405 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4256);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4405);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4257 */
+      /* ./parser//parser_prod.nit:4406 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4257);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4406);
       }
-      /* ./parser//parser_prod.nit:4258 */
+      /* ./parser//parser_prod.nit:4407 */
       ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4260 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4260);
+      /* ./parser//parser_prod.nit:4409 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4409);
     }
-    /* ./parser//parser_prod.nit:4262 */
+    /* ./parser//parser_prod.nit:4411 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4264 */
+  /* ./parser//parser_prod.nit:4413 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4264);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4413);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22486,7 +23290,7 @@ void parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4265 */
+    /* ./parser//parser_prod.nit:4414 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22501,25 +23305,25 @@ void parser_prod___AAndExpr___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:4266 */
+      /* ./parser//parser_prod.nit:4415 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4266);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4415);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4267 */
+      /* ./parser//parser_prod.nit:4416 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4267);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4416);
       }
-      /* ./parser//parser_prod.nit:4268 */
+      /* ./parser//parser_prod.nit:4417 */
       ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4270 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4270);
+      /* ./parser//parser_prod.nit:4419 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4419);
     }
-    /* ./parser//parser_prod.nit:4272 */
+    /* ./parser//parser_prod.nit:4421 */
     goto label1;
   }
   label1: while(0);
@@ -22532,7 +23336,7 @@ void parser_prod___AAndExpr___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_prod;
-  fra.me.line = 4276;
+  fra.me.line = 4425;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22541,19 +23345,19 @@ void 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:4278 */
+  /* ./parser//parser_prod.nit:4427 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4278);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4427);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4279 */
+  /* ./parser//parser_prod.nit:4428 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4279);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4428);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -22561,31 +23365,31 @@ void parser_prod___AAndExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
-  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrElseExpr].i;
+  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrElseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos141]) return;
+  if (init_table[itpos143]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4283;
+  fra.me.line = 4432;
   fra.me.meth = LOCATE_parser_prod___AOrElseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos141] = 1;
+  init_table[itpos143] = 1;
   return;
 }
 void parser_prod___AOrElseExpr___init_aorelseexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrElseExpr].i;
+  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrElseExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos142]) return;
+  if (init_table[itpos144]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4285;
+  fra.me.line = 4434;
   fra.me.meth = LOCATE_parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22595,36 +23399,36 @@ void parser_prod___AOrElseExpr___init_aorelseexpr(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:4290 */
+  /* ./parser//parser_prod.nit:4439 */
   CALL_parser_prod___AOrElseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4291 */
+  /* ./parser//parser_prod.nit:4440 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4291);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4440);
   }
   ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4292 */
+  /* ./parser//parser_prod.nit:4441 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4292);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4441);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4293 */
+  /* ./parser//parser_prod.nit:4442 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4293);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4442);
   }
   ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4294 */
+  /* ./parser//parser_prod.nit:4443 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4294);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4443);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos142] = 1;
+  init_table[itpos144] = 1;
   return;
 }
 void parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -22634,7 +23438,7 @@ void parser_prod___AOrElseExpr___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_prod;
-  fra.me.line = 4297;
+  fra.me.line = 4446;
   fra.me.meth = LOCATE_parser_prod___AOrElseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22645,11 +23449,11 @@ void parser_prod___AOrElseExpr___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:4299 */
+  /* ./parser//parser_prod.nit:4448 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4299);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4448);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22659,7 +23463,7 @@ void parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4300 */
+    /* ./parser//parser_prod.nit:4449 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22674,32 +23478,32 @@ void parser_prod___AOrElseExpr___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:4301 */
+      /* ./parser//parser_prod.nit:4450 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4301);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4450);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4302 */
+      /* ./parser//parser_prod.nit:4451 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4302);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4451);
       }
-      /* ./parser//parser_prod.nit:4303 */
+      /* ./parser//parser_prod.nit:4452 */
       ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4305 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4305);
+      /* ./parser//parser_prod.nit:4454 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4454);
     }
-    /* ./parser//parser_prod.nit:4307 */
+    /* ./parser//parser_prod.nit:4456 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4309 */
+  /* ./parser//parser_prod.nit:4458 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4309);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4458);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22709,7 +23513,7 @@ void parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4310 */
+    /* ./parser//parser_prod.nit:4459 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22724,25 +23528,25 @@ void parser_prod___AOrElseExpr___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:4311 */
+      /* ./parser//parser_prod.nit:4460 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4311);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4460);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4312 */
+      /* ./parser//parser_prod.nit:4461 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4312);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4461);
       }
-      /* ./parser//parser_prod.nit:4313 */
+      /* ./parser//parser_prod.nit:4462 */
       ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4315 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4315);
+      /* ./parser//parser_prod.nit:4464 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4464);
     }
-    /* ./parser//parser_prod.nit:4317 */
+    /* ./parser//parser_prod.nit:4466 */
     goto label1;
   }
   label1: while(0);
@@ -22755,7 +23559,7 @@ void parser_prod___AOrElseExpr___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_prod;
-  fra.me.line = 4321;
+  fra.me.line = 4470;
   fra.me.meth = LOCATE_parser_prod___AOrElseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22764,19 +23568,19 @@ void 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:4323 */
+  /* ./parser//parser_prod.nit:4472 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4323);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4472);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4324 */
+  /* ./parser//parser_prod.nit:4473 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4324);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4473);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -22784,31 +23588,31 @@ void parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
-  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos143]) return;
+  if (init_table[itpos145]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4328;
+  fra.me.line = 4477;
   fra.me.meth = LOCATE_parser_prod___ANotExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos143] = 1;
+  init_table[itpos145] = 1;
   return;
 }
 void parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos144]) return;
+  if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4330;
+  fra.me.line = 4479;
   fra.me.meth = LOCATE_parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22818,36 +23622,36 @@ void parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p2, int* i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4335 */
+  /* ./parser//parser_prod.nit:4484 */
   CALL_parser_prod___ANotExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4336 */
+  /* ./parser//parser_prod.nit:4485 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4336);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4485);
   }
   ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4337 */
+  /* ./parser//parser_prod.nit:4486 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4337);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4486);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4338 */
+  /* ./parser//parser_prod.nit:4487 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4338);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4487);
   }
   ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4339 */
+  /* ./parser//parser_prod.nit:4488 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4339);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4488);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos144] = 1;
+  init_table[itpos146] = 1;
   return;
 }
 void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -22857,7 +23661,7 @@ void parser_prod___ANotExpr___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_prod;
-  fra.me.line = 4342;
+  fra.me.line = 4491;
   fra.me.meth = LOCATE_parser_prod___ANotExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -22868,11 +23672,11 @@ void parser_prod___ANotExpr___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:4344 */
+  /* ./parser//parser_prod.nit:4493 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4344);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 4493);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22882,7 +23686,7 @@ void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4345 */
+    /* ./parser//parser_prod.nit:4494 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22897,32 +23701,32 @@ void parser_prod___ANotExpr___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:4346 */
+      /* ./parser//parser_prod.nit:4495 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4346);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4495);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4347 */
+      /* ./parser//parser_prod.nit:4496 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4347);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4496);
       }
-      /* ./parser//parser_prod.nit:4348 */
+      /* ./parser//parser_prod.nit:4497 */
       ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4350 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4350);
+      /* ./parser//parser_prod.nit:4499 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4499);
     }
-    /* ./parser//parser_prod.nit:4352 */
+    /* ./parser//parser_prod.nit:4501 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4354 */
+  /* ./parser//parser_prod.nit:4503 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4354);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4503);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -22932,7 +23736,7 @@ void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4355 */
+    /* ./parser//parser_prod.nit:4504 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -22947,25 +23751,25 @@ void parser_prod___ANotExpr___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:4356 */
+      /* ./parser//parser_prod.nit:4505 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4356);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4505);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4357 */
+      /* ./parser//parser_prod.nit:4506 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4357);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4506);
       }
-      /* ./parser//parser_prod.nit:4358 */
+      /* ./parser//parser_prod.nit:4507 */
       ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4360 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4360);
+      /* ./parser//parser_prod.nit:4509 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4509);
     }
-    /* ./parser//parser_prod.nit:4362 */
+    /* ./parser//parser_prod.nit:4511 */
     goto label1;
   }
   label1: while(0);
@@ -22978,7 +23782,7 @@ void parser_prod___ANotExpr___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_prod;
-  fra.me.line = 4366;
+  fra.me.line = 4515;
   fra.me.meth = LOCATE_parser_prod___ANotExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22987,19 +23791,19 @@ void 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:4368 */
+  /* ./parser//parser_prod.nit:4517 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4368);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 4517);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4369 */
+  /* ./parser//parser_prod.nit:4518 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4369);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4518);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -23007,31 +23811,31 @@ void parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
-  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos145]) return;
+  if (init_table[itpos147]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4373;
+  fra.me.line = 4522;
   fra.me.meth = LOCATE_parser_prod___AEqExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos145] = 1;
+  init_table[itpos147] = 1;
   return;
 }
 void parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos146]) return;
+  if (init_table[itpos148]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4375;
+  fra.me.line = 4524;
   fra.me.meth = LOCATE_parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23041,36 +23845,36 @@ void parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4380 */
+  /* ./parser//parser_prod.nit:4529 */
   CALL_parser_prod___AEqExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4381 */
+  /* ./parser//parser_prod.nit:4530 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4381);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4530);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4382 */
+  /* ./parser//parser_prod.nit:4531 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4382);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4531);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4383 */
+  /* ./parser//parser_prod.nit:4532 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4383);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4532);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4384 */
+  /* ./parser//parser_prod.nit:4533 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4384);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4533);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos146] = 1;
+  init_table[itpos148] = 1;
   return;
 }
 void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23080,7 +23884,7 @@ void 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_prod;
-  fra.me.line = 4387;
+  fra.me.line = 4536;
   fra.me.meth = LOCATE_parser_prod___AEqExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23091,11 +23895,11 @@ void 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:4389 */
+  /* ./parser//parser_prod.nit:4538 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4389);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4538);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23105,7 +23909,7 @@ void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4390 */
+    /* ./parser//parser_prod.nit:4539 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23120,32 +23924,32 @@ void 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:4391 */
+      /* ./parser//parser_prod.nit:4540 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4391);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4540);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4392 */
+      /* ./parser//parser_prod.nit:4541 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4392);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4541);
       }
-      /* ./parser//parser_prod.nit:4393 */
+      /* ./parser//parser_prod.nit:4542 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4395 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4395);
+      /* ./parser//parser_prod.nit:4544 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4544);
     }
-    /* ./parser//parser_prod.nit:4397 */
+    /* ./parser//parser_prod.nit:4546 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4399 */
+  /* ./parser//parser_prod.nit:4548 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4399);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4548);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23155,7 +23959,7 @@ void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4400 */
+    /* ./parser//parser_prod.nit:4549 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23170,25 +23974,25 @@ void 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:4401 */
+      /* ./parser//parser_prod.nit:4550 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4401);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4550);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4402 */
+      /* ./parser//parser_prod.nit:4551 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4402);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4551);
       }
-      /* ./parser//parser_prod.nit:4403 */
+      /* ./parser//parser_prod.nit:4552 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4405 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4405);
+      /* ./parser//parser_prod.nit:4554 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4554);
     }
-    /* ./parser//parser_prod.nit:4407 */
+    /* ./parser//parser_prod.nit:4556 */
     goto label1;
   }
   label1: while(0);
@@ -23201,7 +24005,7 @@ void parser_prod___AEqExpr___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_prod;
-  fra.me.line = 4411;
+  fra.me.line = 4560;
   fra.me.meth = LOCATE_parser_prod___AEqExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23210,19 +24014,19 @@ void 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:4413 */
+  /* ./parser//parser_prod.nit:4562 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4413);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4562);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4414 */
+  /* ./parser//parser_prod.nit:4563 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4414);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4563);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -23230,31 +24034,31 @@ void parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
-  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos147]) return;
+  if (init_table[itpos149]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4418;
+  fra.me.line = 4567;
   fra.me.meth = LOCATE_parser_prod___AEeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos147] = 1;
+  init_table[itpos149] = 1;
   return;
 }
 void parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos148]) return;
+  if (init_table[itpos150]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4420;
+  fra.me.line = 4569;
   fra.me.meth = LOCATE_parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23264,36 +24068,36 @@ void parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4425 */
+  /* ./parser//parser_prod.nit:4574 */
   CALL_parser_prod___AEeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4426 */
+  /* ./parser//parser_prod.nit:4575 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4426);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4575);
   }
   ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4427 */
+  /* ./parser//parser_prod.nit:4576 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4427);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4576);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4428 */
+  /* ./parser//parser_prod.nit:4577 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4428);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4577);
   }
   ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4429 */
+  /* ./parser//parser_prod.nit:4578 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4429);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4578);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos148] = 1;
+  init_table[itpos150] = 1;
   return;
 }
 void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23303,7 +24107,7 @@ void 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_prod;
-  fra.me.line = 4432;
+  fra.me.line = 4581;
   fra.me.meth = LOCATE_parser_prod___AEeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23314,11 +24118,11 @@ void 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:4434 */
+  /* ./parser//parser_prod.nit:4583 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4434);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4583);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23328,7 +24132,7 @@ void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4435 */
+    /* ./parser//parser_prod.nit:4584 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23343,32 +24147,32 @@ void 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:4436 */
+      /* ./parser//parser_prod.nit:4585 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4436);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4585);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4437 */
+      /* ./parser//parser_prod.nit:4586 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4437);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4586);
       }
-      /* ./parser//parser_prod.nit:4438 */
+      /* ./parser//parser_prod.nit:4587 */
       ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4440 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4440);
+      /* ./parser//parser_prod.nit:4589 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4589);
     }
-    /* ./parser//parser_prod.nit:4442 */
+    /* ./parser//parser_prod.nit:4591 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4444 */
+  /* ./parser//parser_prod.nit:4593 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4444);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4593);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23378,7 +24182,7 @@ void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4445 */
+    /* ./parser//parser_prod.nit:4594 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23393,25 +24197,25 @@ void 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:4446 */
+      /* ./parser//parser_prod.nit:4595 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4446);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4595);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4447 */
+      /* ./parser//parser_prod.nit:4596 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4447);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4596);
       }
-      /* ./parser//parser_prod.nit:4448 */
+      /* ./parser//parser_prod.nit:4597 */
       ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4450 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4450);
+      /* ./parser//parser_prod.nit:4599 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4599);
     }
-    /* ./parser//parser_prod.nit:4452 */
+    /* ./parser//parser_prod.nit:4601 */
     goto label1;
   }
   label1: while(0);
@@ -23424,7 +24228,7 @@ void parser_prod___AEeExpr___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_prod;
-  fra.me.line = 4456;
+  fra.me.line = 4605;
   fra.me.meth = LOCATE_parser_prod___AEeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23433,19 +24237,19 @@ void 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:4458 */
+  /* ./parser//parser_prod.nit:4607 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4458);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4607);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4459 */
+  /* ./parser//parser_prod.nit:4608 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4459);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4608);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -23453,31 +24257,31 @@ void parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
-  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos149]) return;
+  if (init_table[itpos151]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4463;
+  fra.me.line = 4612;
   fra.me.meth = LOCATE_parser_prod___ANeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos149] = 1;
+  init_table[itpos151] = 1;
   return;
 }
 void parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos150]) return;
+  if (init_table[itpos152]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4465;
+  fra.me.line = 4614;
   fra.me.meth = LOCATE_parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23487,36 +24291,36 @@ void parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4470 */
+  /* ./parser//parser_prod.nit:4619 */
   CALL_parser_prod___ANeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4471 */
+  /* ./parser//parser_prod.nit:4620 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4471);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4620);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4472 */
+  /* ./parser//parser_prod.nit:4621 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4472);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4621);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4473 */
+  /* ./parser//parser_prod.nit:4622 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4473);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4622);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4474 */
+  /* ./parser//parser_prod.nit:4623 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4474);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4623);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos150] = 1;
+  init_table[itpos152] = 1;
   return;
 }
 void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23526,7 +24330,7 @@ void 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_prod;
-  fra.me.line = 4477;
+  fra.me.line = 4626;
   fra.me.meth = LOCATE_parser_prod___ANeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23537,11 +24341,11 @@ void 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:4479 */
+  /* ./parser//parser_prod.nit:4628 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4479);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4628);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23551,7 +24355,7 @@ void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4480 */
+    /* ./parser//parser_prod.nit:4629 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23566,32 +24370,32 @@ void 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:4481 */
+      /* ./parser//parser_prod.nit:4630 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4481);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4630);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4482 */
+      /* ./parser//parser_prod.nit:4631 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4482);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4631);
       }
-      /* ./parser//parser_prod.nit:4483 */
+      /* ./parser//parser_prod.nit:4632 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4485 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4485);
+      /* ./parser//parser_prod.nit:4634 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4634);
     }
-    /* ./parser//parser_prod.nit:4487 */
+    /* ./parser//parser_prod.nit:4636 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4489 */
+  /* ./parser//parser_prod.nit:4638 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4489);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4638);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23601,7 +24405,7 @@ void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4490 */
+    /* ./parser//parser_prod.nit:4639 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23616,25 +24420,25 @@ void 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:4491 */
+      /* ./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_prod, 4491);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4640);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4492 */
+      /* ./parser//parser_prod.nit:4641 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4492);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4641);
       }
-      /* ./parser//parser_prod.nit:4493 */
+      /* ./parser//parser_prod.nit:4642 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4495 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4495);
+      /* ./parser//parser_prod.nit:4644 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4644);
     }
-    /* ./parser//parser_prod.nit:4497 */
+    /* ./parser//parser_prod.nit:4646 */
     goto label1;
   }
   label1: while(0);
@@ -23647,7 +24451,7 @@ void parser_prod___ANeExpr___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_prod;
-  fra.me.line = 4501;
+  fra.me.line = 4650;
   fra.me.meth = LOCATE_parser_prod___ANeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23656,19 +24460,19 @@ void 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:4503 */
+  /* ./parser//parser_prod.nit:4652 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4503);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4652);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4504 */
+  /* ./parser//parser_prod.nit:4653 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4504);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4653);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -23676,31 +24480,31 @@ void parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
-  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos151]) return;
+  if (init_table[itpos153]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4508;
+  fra.me.line = 4657;
   fra.me.meth = LOCATE_parser_prod___ALtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos151] = 1;
+  init_table[itpos153] = 1;
   return;
 }
 void parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos152]) return;
+  if (init_table[itpos154]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4510;
+  fra.me.line = 4659;
   fra.me.meth = LOCATE_parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23710,36 +24514,36 @@ void parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4515 */
+  /* ./parser//parser_prod.nit:4664 */
   CALL_parser_prod___ALtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4516 */
+  /* ./parser//parser_prod.nit:4665 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4516);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4665);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4517 */
+  /* ./parser//parser_prod.nit:4666 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4517);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4666);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4518 */
+  /* ./parser//parser_prod.nit:4667 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4518);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4667);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4519 */
+  /* ./parser//parser_prod.nit:4668 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4519);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4668);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos152] = 1;
+  init_table[itpos154] = 1;
   return;
 }
 void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23749,7 +24553,7 @@ void 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_prod;
-  fra.me.line = 4522;
+  fra.me.line = 4671;
   fra.me.meth = LOCATE_parser_prod___ALtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23760,11 +24564,11 @@ void 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:4524 */
+  /* ./parser//parser_prod.nit:4673 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4524);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4673);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23774,7 +24578,7 @@ void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4525 */
+    /* ./parser//parser_prod.nit:4674 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23789,32 +24593,32 @@ void 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:4526 */
+      /* ./parser//parser_prod.nit:4675 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4526);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4675);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4527 */
+      /* ./parser//parser_prod.nit:4676 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4527);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4676);
       }
-      /* ./parser//parser_prod.nit:4528 */
+      /* ./parser//parser_prod.nit:4677 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4530 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4530);
+      /* ./parser//parser_prod.nit:4679 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4679);
     }
-    /* ./parser//parser_prod.nit:4532 */
+    /* ./parser//parser_prod.nit:4681 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4534 */
+  /* ./parser//parser_prod.nit:4683 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4534);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4683);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23824,7 +24628,7 @@ void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4535 */
+    /* ./parser//parser_prod.nit:4684 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -23839,25 +24643,25 @@ void 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:4536 */
+      /* ./parser//parser_prod.nit:4685 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4536);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4685);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4537 */
+      /* ./parser//parser_prod.nit:4686 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4537);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4686);
       }
-      /* ./parser//parser_prod.nit:4538 */
+      /* ./parser//parser_prod.nit:4687 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4540 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4540);
+      /* ./parser//parser_prod.nit:4689 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4689);
     }
-    /* ./parser//parser_prod.nit:4542 */
+    /* ./parser//parser_prod.nit:4691 */
     goto label1;
   }
   label1: while(0);
@@ -23870,7 +24674,7 @@ void parser_prod___ALtExpr___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_prod;
-  fra.me.line = 4546;
+  fra.me.line = 4695;
   fra.me.meth = LOCATE_parser_prod___ALtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23879,19 +24683,19 @@ void 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:4548 */
+  /* ./parser//parser_prod.nit:4697 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4548);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4697);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4549 */
+  /* ./parser//parser_prod.nit:4698 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4549);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4698);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -23899,31 +24703,31 @@ void parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
-  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos153]) return;
+  if (init_table[itpos155]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4553;
+  fra.me.line = 4702;
   fra.me.meth = LOCATE_parser_prod___ALeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos153] = 1;
+  init_table[itpos155] = 1;
   return;
 }
 void parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos154]) return;
+  if (init_table[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4555;
+  fra.me.line = 4704;
   fra.me.meth = LOCATE_parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23933,36 +24737,36 @@ void parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4560 */
+  /* ./parser//parser_prod.nit:4709 */
   CALL_parser_prod___ALeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4561 */
+  /* ./parser//parser_prod.nit:4710 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4561);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4710);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4562 */
+  /* ./parser//parser_prod.nit:4711 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4562);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4711);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4563 */
+  /* ./parser//parser_prod.nit:4712 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4563);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4712);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4564 */
+  /* ./parser//parser_prod.nit:4713 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4564);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4713);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos154] = 1;
+  init_table[itpos156] = 1;
   return;
 }
 void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23972,7 +24776,7 @@ void 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_prod;
-  fra.me.line = 4567;
+  fra.me.line = 4716;
   fra.me.meth = LOCATE_parser_prod___ALeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23983,11 +24787,11 @@ void 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:4569 */
+  /* ./parser//parser_prod.nit:4718 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4569);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4718);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -23997,7 +24801,7 @@ void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4570 */
+    /* ./parser//parser_prod.nit:4719 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24012,32 +24816,32 @@ void 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:4571 */
+      /* ./parser//parser_prod.nit:4720 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4571);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4720);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4572 */
+      /* ./parser//parser_prod.nit:4721 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4572);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4721);
       }
-      /* ./parser//parser_prod.nit:4573 */
+      /* ./parser//parser_prod.nit:4722 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4575 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4575);
+      /* ./parser//parser_prod.nit:4724 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4724);
     }
-    /* ./parser//parser_prod.nit:4577 */
+    /* ./parser//parser_prod.nit:4726 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4579 */
+  /* ./parser//parser_prod.nit:4728 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4579);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4728);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24047,7 +24851,7 @@ void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4580 */
+    /* ./parser//parser_prod.nit:4729 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24062,25 +24866,25 @@ void 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:4581 */
+      /* ./parser//parser_prod.nit:4730 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4581);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4730);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4582 */
+      /* ./parser//parser_prod.nit:4731 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4582);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4731);
       }
-      /* ./parser//parser_prod.nit:4583 */
+      /* ./parser//parser_prod.nit:4732 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4585 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4585);
+      /* ./parser//parser_prod.nit:4734 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4734);
     }
-    /* ./parser//parser_prod.nit:4587 */
+    /* ./parser//parser_prod.nit:4736 */
     goto label1;
   }
   label1: while(0);
@@ -24093,7 +24897,7 @@ void parser_prod___ALeExpr___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_prod;
-  fra.me.line = 4591;
+  fra.me.line = 4740;
   fra.me.meth = LOCATE_parser_prod___ALeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24102,19 +24906,19 @@ void 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:4593 */
+  /* ./parser//parser_prod.nit:4742 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4593);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4742);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4594 */
+  /* ./parser//parser_prod.nit:4743 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4594);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4743);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24122,31 +24926,31 @@ void parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
-  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlExpr].i;
+  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos155]) return;
+  if (init_table[itpos157]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4598;
+  fra.me.line = 4747;
   fra.me.meth = LOCATE_parser_prod___ALlExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos155] = 1;
+  init_table[itpos157] = 1;
   return;
 }
 void parser_prod___ALlExpr___init_allexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlExpr].i;
+  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos156]) return;
+  if (init_table[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4600;
+  fra.me.line = 4749;
   fra.me.meth = LOCATE_parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24156,36 +24960,36 @@ void parser_prod___ALlExpr___init_allexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4605 */
+  /* ./parser//parser_prod.nit:4754 */
   CALL_parser_prod___ALlExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4606 */
+  /* ./parser//parser_prod.nit:4755 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4606);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4755);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4607 */
+  /* ./parser//parser_prod.nit:4756 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4607);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4756);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4608 */
+  /* ./parser//parser_prod.nit:4757 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4608);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4757);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4609 */
+  /* ./parser//parser_prod.nit:4758 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4609);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4758);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos156] = 1;
+  init_table[itpos158] = 1;
   return;
 }
 void parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -24195,7 +24999,7 @@ void 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_prod;
-  fra.me.line = 4612;
+  fra.me.line = 4761;
   fra.me.meth = LOCATE_parser_prod___ALlExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24206,11 +25010,11 @@ void 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:4614 */
+  /* ./parser//parser_prod.nit:4763 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4614);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4763);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24220,7 +25024,7 @@ void parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4615 */
+    /* ./parser//parser_prod.nit:4764 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24235,32 +25039,32 @@ void 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:4616 */
+      /* ./parser//parser_prod.nit:4765 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4616);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4765);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4617 */
+      /* ./parser//parser_prod.nit:4766 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4617);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4766);
       }
-      /* ./parser//parser_prod.nit:4618 */
+      /* ./parser//parser_prod.nit:4767 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4620 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4620);
+      /* ./parser//parser_prod.nit:4769 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4769);
     }
-    /* ./parser//parser_prod.nit:4622 */
+    /* ./parser//parser_prod.nit:4771 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4624 */
+  /* ./parser//parser_prod.nit:4773 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4624);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4773);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24270,7 +25074,7 @@ void parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4625 */
+    /* ./parser//parser_prod.nit:4774 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24285,25 +25089,25 @@ void 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:4626 */
+      /* ./parser//parser_prod.nit:4775 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4626);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4775);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4627 */
+      /* ./parser//parser_prod.nit:4776 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4627);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4776);
       }
-      /* ./parser//parser_prod.nit:4628 */
+      /* ./parser//parser_prod.nit:4777 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4630 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4630);
+      /* ./parser//parser_prod.nit:4779 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4779);
     }
-    /* ./parser//parser_prod.nit:4632 */
+    /* ./parser//parser_prod.nit:4781 */
     goto label1;
   }
   label1: while(0);
@@ -24316,7 +25120,7 @@ void parser_prod___ALlExpr___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_prod;
-  fra.me.line = 4636;
+  fra.me.line = 4785;
   fra.me.meth = LOCATE_parser_prod___ALlExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24325,19 +25129,19 @@ void 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:4638 */
+  /* ./parser//parser_prod.nit:4787 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4638);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4787);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4639 */
+  /* ./parser//parser_prod.nit:4788 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4639);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4788);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24345,31 +25149,31 @@ void parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
-  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos157]) return;
+  if (init_table[itpos159]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4643;
+  fra.me.line = 4792;
   fra.me.meth = LOCATE_parser_prod___AGtExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos157] = 1;
+  init_table[itpos159] = 1;
   return;
 }
 void parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos158]) return;
+  if (init_table[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4645;
+  fra.me.line = 4794;
   fra.me.meth = LOCATE_parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24379,36 +25183,36 @@ void parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4650 */
+  /* ./parser//parser_prod.nit:4799 */
   CALL_parser_prod___AGtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4651 */
+  /* ./parser//parser_prod.nit:4800 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4651);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4800);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4652 */
+  /* ./parser//parser_prod.nit:4801 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4652);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4801);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4653 */
+  /* ./parser//parser_prod.nit:4802 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4653);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4802);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4654 */
+  /* ./parser//parser_prod.nit:4803 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4654);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4803);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos158] = 1;
+  init_table[itpos160] = 1;
   return;
 }
 void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -24418,7 +25222,7 @@ void 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_prod;
-  fra.me.line = 4657;
+  fra.me.line = 4806;
   fra.me.meth = LOCATE_parser_prod___AGtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24429,11 +25233,11 @@ void 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:4659 */
+  /* ./parser//parser_prod.nit:4808 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4659);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4808);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24443,7 +25247,7 @@ void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4660 */
+    /* ./parser//parser_prod.nit:4809 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24458,32 +25262,32 @@ void 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:4661 */
+      /* ./parser//parser_prod.nit:4810 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4661);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4810);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4662 */
+      /* ./parser//parser_prod.nit:4811 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4662);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4811);
       }
-      /* ./parser//parser_prod.nit:4663 */
+      /* ./parser//parser_prod.nit:4812 */
       ATTR_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_prod, 4665);
+      /* ./parser//parser_prod.nit:4814 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4814);
     }
-    /* ./parser//parser_prod.nit:4667 */
+    /* ./parser//parser_prod.nit:4816 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4669 */
+  /* ./parser//parser_prod.nit:4818 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4669);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4818);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24493,7 +25297,7 @@ void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4670 */
+    /* ./parser//parser_prod.nit:4819 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24508,25 +25312,25 @@ void 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:4671 */
+      /* ./parser//parser_prod.nit:4820 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4671);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4820);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4672 */
+      /* ./parser//parser_prod.nit:4821 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4672);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4821);
       }
-      /* ./parser//parser_prod.nit:4673 */
+      /* ./parser//parser_prod.nit:4822 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4675 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4675);
+      /* ./parser//parser_prod.nit:4824 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4824);
     }
-    /* ./parser//parser_prod.nit:4677 */
+    /* ./parser//parser_prod.nit:4826 */
     goto label1;
   }
   label1: while(0);
@@ -24539,7 +25343,7 @@ void parser_prod___AGtExpr___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_prod;
-  fra.me.line = 4681;
+  fra.me.line = 4830;
   fra.me.meth = LOCATE_parser_prod___AGtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24548,19 +25352,19 @@ void 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:4683 */
+  /* ./parser//parser_prod.nit:4832 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4683);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4832);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4684 */
+  /* ./parser//parser_prod.nit:4833 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4684);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4833);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24568,31 +25372,31 @@ void parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
-  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos159]) return;
+  if (init_table[itpos161]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4688;
+  fra.me.line = 4837;
   fra.me.meth = LOCATE_parser_prod___AGeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos159] = 1;
+  init_table[itpos161] = 1;
   return;
 }
 void parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos160]) return;
+  if (init_table[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4690;
+  fra.me.line = 4839;
   fra.me.meth = LOCATE_parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24602,36 +25406,36 @@ void parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4695 */
+  /* ./parser//parser_prod.nit:4844 */
   CALL_parser_prod___AGeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4696 */
+  /* ./parser//parser_prod.nit:4845 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4696);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4845);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4697 */
+  /* ./parser//parser_prod.nit:4846 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4697);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4846);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4698 */
+  /* ./parser//parser_prod.nit:4847 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4698);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4847);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4699 */
+  /* ./parser//parser_prod.nit:4848 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4699);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4848);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos160] = 1;
+  init_table[itpos162] = 1;
   return;
 }
 void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -24641,7 +25445,7 @@ void 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_prod;
-  fra.me.line = 4702;
+  fra.me.line = 4851;
   fra.me.meth = LOCATE_parser_prod___AGeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24652,11 +25456,11 @@ void 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:4704 */
+  /* ./parser//parser_prod.nit:4853 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4704);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4853);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24666,7 +25470,7 @@ void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4705 */
+    /* ./parser//parser_prod.nit:4854 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24681,32 +25485,32 @@ void 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:4706 */
+      /* ./parser//parser_prod.nit:4855 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4706);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4855);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4707 */
+      /* ./parser//parser_prod.nit:4856 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4707);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4856);
       }
-      /* ./parser//parser_prod.nit:4708 */
+      /* ./parser//parser_prod.nit:4857 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4710 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4710);
+      /* ./parser//parser_prod.nit:4859 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4859);
     }
-    /* ./parser//parser_prod.nit:4712 */
+    /* ./parser//parser_prod.nit:4861 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4714 */
+  /* ./parser//parser_prod.nit:4863 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4714);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4863);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24716,7 +25520,7 @@ void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4715 */
+    /* ./parser//parser_prod.nit:4864 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24731,25 +25535,25 @@ void 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:4716 */
+      /* ./parser//parser_prod.nit:4865 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4716);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4865);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4717 */
+      /* ./parser//parser_prod.nit:4866 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4717);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4866);
       }
-      /* ./parser//parser_prod.nit:4718 */
+      /* ./parser//parser_prod.nit:4867 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4720 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4720);
+      /* ./parser//parser_prod.nit:4869 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4869);
     }
-    /* ./parser//parser_prod.nit:4722 */
+    /* ./parser//parser_prod.nit:4871 */
     goto label1;
   }
   label1: while(0);
@@ -24762,7 +25566,7 @@ void parser_prod___AGeExpr___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_prod;
-  fra.me.line = 4726;
+  fra.me.line = 4875;
   fra.me.meth = LOCATE_parser_prod___AGeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24771,19 +25575,19 @@ void 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:4728 */
+  /* ./parser//parser_prod.nit:4877 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4728);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4877);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4729 */
+  /* ./parser//parser_prod.nit:4878 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4729);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4878);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -24791,31 +25595,31 @@ void parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
-  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgExpr].i;
+  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos161]) return;
+  if (init_table[itpos163]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4733;
+  fra.me.line = 4882;
   fra.me.meth = LOCATE_parser_prod___AGgExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos161] = 1;
+  init_table[itpos163] = 1;
   return;
 }
 void parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgExpr].i;
+  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos162]) return;
+  if (init_table[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4735;
+  fra.me.line = 4884;
   fra.me.meth = LOCATE_parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24825,36 +25629,36 @@ void parser_prod___AGgExpr___init_aggexpr(val_t p0, val_t p1, val_t p2, int* ini
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4740 */
+  /* ./parser//parser_prod.nit:4889 */
   CALL_parser_prod___AGgExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4741 */
+  /* ./parser//parser_prod.nit:4890 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4741);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4890);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4742 */
+  /* ./parser//parser_prod.nit:4891 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4742);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4891);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4743 */
+  /* ./parser//parser_prod.nit:4892 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4743);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4892);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4744 */
+  /* ./parser//parser_prod.nit:4893 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4744);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4893);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos162] = 1;
+  init_table[itpos164] = 1;
   return;
 }
 void parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -24864,7 +25668,7 @@ void 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_prod;
-  fra.me.line = 4747;
+  fra.me.line = 4896;
   fra.me.meth = LOCATE_parser_prod___AGgExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24875,11 +25679,11 @@ void 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:4749 */
+  /* ./parser//parser_prod.nit:4898 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4749);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4898);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24889,7 +25693,7 @@ void parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4750 */
+    /* ./parser//parser_prod.nit:4899 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24904,32 +25708,32 @@ void 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:4751 */
+      /* ./parser//parser_prod.nit:4900 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4751);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4900);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4752 */
+      /* ./parser//parser_prod.nit:4901 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4752);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4901);
       }
-      /* ./parser//parser_prod.nit:4753 */
+      /* ./parser//parser_prod.nit:4902 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4755 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4755);
+      /* ./parser//parser_prod.nit:4904 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4904);
     }
-    /* ./parser//parser_prod.nit:4757 */
+    /* ./parser//parser_prod.nit:4906 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4759 */
+  /* ./parser//parser_prod.nit:4908 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4759);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4908);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -24939,7 +25743,7 @@ void parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4760 */
+    /* ./parser//parser_prod.nit:4909 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -24954,25 +25758,25 @@ void 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:4761 */
+      /* ./parser//parser_prod.nit:4910 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4761);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4910);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4762 */
+      /* ./parser//parser_prod.nit:4911 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4762);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4911);
       }
-      /* ./parser//parser_prod.nit:4763 */
+      /* ./parser//parser_prod.nit:4912 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4765 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4765);
+      /* ./parser//parser_prod.nit:4914 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4914);
     }
-    /* ./parser//parser_prod.nit:4767 */
+    /* ./parser//parser_prod.nit:4916 */
     goto label1;
   }
   label1: while(0);
@@ -24985,7 +25789,7 @@ void parser_prod___AGgExpr___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_prod;
-  fra.me.line = 4771;
+  fra.me.line = 4920;
   fra.me.meth = LOCATE_parser_prod___AGgExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24994,19 +25798,19 @@ void 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:4773 */
+  /* ./parser//parser_prod.nit:4922 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4773);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4922);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4774 */
+  /* ./parser//parser_prod.nit:4923 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4774);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4923);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25014,31 +25818,31 @@ void parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
-  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos163]) return;
+  if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4778;
+  fra.me.line = 4927;
   fra.me.meth = LOCATE_parser_prod___AIsaExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos163] = 1;
+  init_table[itpos165] = 1;
   return;
 }
 void parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos164]) return;
+  if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4780;
+  fra.me.line = 4929;
   fra.me.meth = LOCATE_parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25048,36 +25852,36 @@ void parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p2, int* i
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4785 */
+  /* ./parser//parser_prod.nit:4934 */
   CALL_parser_prod___AIsaExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4786 */
+  /* ./parser//parser_prod.nit:4935 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4786);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4935);
   }
   ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4787 */
+  /* ./parser//parser_prod.nit:4936 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4787);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4936);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4788 */
+  /* ./parser//parser_prod.nit:4937 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4788);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4937);
   }
   ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4789 */
+  /* ./parser//parser_prod.nit:4938 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4789);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4938);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos164] = 1;
+  init_table[itpos166] = 1;
   return;
 }
 void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25087,7 +25891,7 @@ void parser_prod___AIsaExpr___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_prod;
-  fra.me.line = 4792;
+  fra.me.line = 4941;
   fra.me.meth = LOCATE_parser_prod___AIsaExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25098,11 +25902,11 @@ void parser_prod___AIsaExpr___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:4794 */
+  /* ./parser//parser_prod.nit:4943 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4794);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4943);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25112,7 +25916,7 @@ void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4795 */
+    /* ./parser//parser_prod.nit:4944 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25127,32 +25931,32 @@ void parser_prod___AIsaExpr___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:4796 */
+      /* ./parser//parser_prod.nit:4945 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4796);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4945);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4797 */
+      /* ./parser//parser_prod.nit:4946 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4797);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4946);
       }
-      /* ./parser//parser_prod.nit:4798 */
+      /* ./parser//parser_prod.nit:4947 */
       ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4800 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4800);
+      /* ./parser//parser_prod.nit:4949 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4949);
     }
-    /* ./parser//parser_prod.nit:4802 */
+    /* ./parser//parser_prod.nit:4951 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4804 */
+  /* ./parser//parser_prod.nit:4953 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4804);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 4953);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25162,7 +25966,7 @@ void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4805 */
+    /* ./parser//parser_prod.nit:4954 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25177,25 +25981,25 @@ void parser_prod___AIsaExpr___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:4806 */
+      /* ./parser//parser_prod.nit:4955 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4806);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4955);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4807 */
+      /* ./parser//parser_prod.nit:4956 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4807);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4956);
       }
-      /* ./parser//parser_prod.nit:4808 */
+      /* ./parser//parser_prod.nit:4957 */
       ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4810 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4810);
+      /* ./parser//parser_prod.nit:4959 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4959);
     }
-    /* ./parser//parser_prod.nit:4812 */
+    /* ./parser//parser_prod.nit:4961 */
     goto label1;
   }
   label1: while(0);
@@ -25208,7 +26012,7 @@ void parser_prod___AIsaExpr___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_prod;
-  fra.me.line = 4816;
+  fra.me.line = 4965;
   fra.me.meth = LOCATE_parser_prod___AIsaExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25217,19 +26021,19 @@ void 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:4818 */
+  /* ./parser//parser_prod.nit:4967 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4818);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4967);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4819 */
+  /* ./parser//parser_prod.nit:4968 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4819);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 4968);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25237,31 +26041,31 @@ void parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
-  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos165]) return;
+  if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4823;
+  fra.me.line = 4972;
   fra.me.meth = LOCATE_parser_prod___APlusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos165] = 1;
+  init_table[itpos167] = 1;
   return;
 }
 void parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos166]) return;
+  if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4825;
+  fra.me.line = 4974;
   fra.me.meth = LOCATE_parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25271,36 +26075,36 @@ void parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t p2, int*
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4830 */
+  /* ./parser//parser_prod.nit:4979 */
   CALL_parser_prod___APlusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4831 */
+  /* ./parser//parser_prod.nit:4980 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4831);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4980);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4832 */
+  /* ./parser//parser_prod.nit:4981 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4832);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4981);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4833 */
+  /* ./parser//parser_prod.nit:4982 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4833);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4982);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4834 */
+  /* ./parser//parser_prod.nit:4983 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4834);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4983);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos166] = 1;
+  init_table[itpos168] = 1;
   return;
 }
 void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25310,7 +26114,7 @@ void parser_prod___APlusExpr___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_prod;
-  fra.me.line = 4837;
+  fra.me.line = 4986;
   fra.me.meth = LOCATE_parser_prod___APlusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25321,11 +26125,11 @@ void parser_prod___APlusExpr___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:4839 */
+  /* ./parser//parser_prod.nit:4988 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4839);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4988);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25335,7 +26139,7 @@ void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4840 */
+    /* ./parser//parser_prod.nit:4989 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25350,32 +26154,32 @@ void parser_prod___APlusExpr___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:4841 */
+      /* ./parser//parser_prod.nit:4990 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4841);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4990);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4842 */
+      /* ./parser//parser_prod.nit:4991 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4842);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4991);
       }
-      /* ./parser//parser_prod.nit:4843 */
+      /* ./parser//parser_prod.nit:4992 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4845 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4845);
+      /* ./parser//parser_prod.nit:4994 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4994);
     }
-    /* ./parser//parser_prod.nit:4847 */
+    /* ./parser//parser_prod.nit:4996 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4849 */
+  /* ./parser//parser_prod.nit:4998 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4849);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4998);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25385,7 +26189,7 @@ void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4850 */
+    /* ./parser//parser_prod.nit:4999 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25400,25 +26204,25 @@ void parser_prod___APlusExpr___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:4851 */
+      /* ./parser//parser_prod.nit:5000 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4851);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5000);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4852 */
+      /* ./parser//parser_prod.nit:5001 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4852);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5001);
       }
-      /* ./parser//parser_prod.nit:4853 */
+      /* ./parser//parser_prod.nit:5002 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4855 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4855);
+      /* ./parser//parser_prod.nit:5004 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5004);
     }
-    /* ./parser//parser_prod.nit:4857 */
+    /* ./parser//parser_prod.nit:5006 */
     goto label1;
   }
   label1: while(0);
@@ -25431,7 +26235,7 @@ void parser_prod___APlusExpr___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_prod;
-  fra.me.line = 4861;
+  fra.me.line = 5010;
   fra.me.meth = LOCATE_parser_prod___APlusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25440,19 +26244,19 @@ void 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:4863 */
+  /* ./parser//parser_prod.nit:5012 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4863);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5012);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4864 */
+  /* ./parser//parser_prod.nit:5013 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4864);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5013);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25460,31 +26264,31 @@ void parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
-  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos167]) return;
+  if (init_table[itpos169]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4868;
+  fra.me.line = 5017;
   fra.me.meth = LOCATE_parser_prod___AMinusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos167] = 1;
+  init_table[itpos169] = 1;
   return;
 }
 void parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos168]) return;
+  if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4870;
+  fra.me.line = 5019;
   fra.me.meth = LOCATE_parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25494,36 +26298,36 @@ void parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4875 */
+  /* ./parser//parser_prod.nit:5024 */
   CALL_parser_prod___AMinusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4876 */
+  /* ./parser//parser_prod.nit:5025 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4876);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5025);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4877 */
+  /* ./parser//parser_prod.nit:5026 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4877);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5026);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4878 */
+  /* ./parser//parser_prod.nit:5027 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4878);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5027);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4879 */
+  /* ./parser//parser_prod.nit:5028 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4879);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5028);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos168] = 1;
+  init_table[itpos170] = 1;
   return;
 }
 void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25533,7 +26337,7 @@ void parser_prod___AMinusExpr___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_prod;
-  fra.me.line = 4882;
+  fra.me.line = 5031;
   fra.me.meth = LOCATE_parser_prod___AMinusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25544,11 +26348,11 @@ void parser_prod___AMinusExpr___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:4884 */
+  /* ./parser//parser_prod.nit:5033 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4884);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5033);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25558,7 +26362,7 @@ void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4885 */
+    /* ./parser//parser_prod.nit:5034 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25573,32 +26377,32 @@ void parser_prod___AMinusExpr___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:4886 */
+      /* ./parser//parser_prod.nit:5035 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4886);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5035);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4887 */
+      /* ./parser//parser_prod.nit:5036 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4887);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5036);
       }
-      /* ./parser//parser_prod.nit:4888 */
+      /* ./parser//parser_prod.nit:5037 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4890 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4890);
+      /* ./parser//parser_prod.nit:5039 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5039);
     }
-    /* ./parser//parser_prod.nit:4892 */
+    /* ./parser//parser_prod.nit:5041 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4894 */
+  /* ./parser//parser_prod.nit:5043 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4894);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5043);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25608,7 +26412,7 @@ void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4895 */
+    /* ./parser//parser_prod.nit:5044 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25623,25 +26427,25 @@ void parser_prod___AMinusExpr___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:4896 */
+      /* ./parser//parser_prod.nit:5045 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4896);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5045);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4897 */
+      /* ./parser//parser_prod.nit:5046 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4897);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5046);
       }
-      /* ./parser//parser_prod.nit:4898 */
+      /* ./parser//parser_prod.nit:5047 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4900 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4900);
+      /* ./parser//parser_prod.nit:5049 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5049);
     }
-    /* ./parser//parser_prod.nit:4902 */
+    /* ./parser//parser_prod.nit:5051 */
     goto label1;
   }
   label1: while(0);
@@ -25654,7 +26458,7 @@ void parser_prod___AMinusExpr___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_prod;
-  fra.me.line = 4906;
+  fra.me.line = 5055;
   fra.me.meth = LOCATE_parser_prod___AMinusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25663,19 +26467,19 @@ void 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:4908 */
+  /* ./parser//parser_prod.nit:5057 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4908);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5057);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4909 */
+  /* ./parser//parser_prod.nit:5058 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4909);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5058);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25683,31 +26487,31 @@ void parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table){
-  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos169]) return;
+  if (init_table[itpos171]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4913;
+  fra.me.line = 5062;
   fra.me.meth = LOCATE_parser_prod___AStarshipExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos169] = 1;
+  init_table[itpos171] = 1;
   return;
 }
 void parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos170]) return;
+  if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4915;
+  fra.me.line = 5064;
   fra.me.meth = LOCATE_parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25717,36 +26521,36 @@ void parser_prod___AStarshipExpr___init_astarshipexpr(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:4920 */
+  /* ./parser//parser_prod.nit:5069 */
   CALL_parser_prod___AStarshipExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4921 */
+  /* ./parser//parser_prod.nit:5070 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4921);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5070);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4922 */
+  /* ./parser//parser_prod.nit:5071 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4922);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5071);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4923 */
+  /* ./parser//parser_prod.nit:5072 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4923);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5072);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4924 */
+  /* ./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_prod, 4924);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5073);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos170] = 1;
+  init_table[itpos172] = 1;
   return;
 }
 void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25756,7 +26560,7 @@ void parser_prod___AStarshipExpr___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_prod;
-  fra.me.line = 4927;
+  fra.me.line = 5076;
   fra.me.meth = LOCATE_parser_prod___AStarshipExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25767,11 +26571,11 @@ void parser_prod___AStarshipExpr___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:4929 */
+  /* ./parser//parser_prod.nit:5078 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4929);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5078);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25781,7 +26585,7 @@ void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4930 */
+    /* ./parser//parser_prod.nit:5079 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25796,32 +26600,32 @@ void parser_prod___AStarshipExpr___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:4931 */
+      /* ./parser//parser_prod.nit:5080 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4931);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5080);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4932 */
+      /* ./parser//parser_prod.nit:5081 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4932);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5081);
       }
-      /* ./parser//parser_prod.nit:4933 */
+      /* ./parser//parser_prod.nit:5082 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4935 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4935);
+      /* ./parser//parser_prod.nit:5084 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5084);
     }
-    /* ./parser//parser_prod.nit:4937 */
+    /* ./parser//parser_prod.nit:5086 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4939 */
+  /* ./parser//parser_prod.nit:5088 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4939);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5088);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -25831,7 +26635,7 @@ void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4940 */
+    /* ./parser//parser_prod.nit:5089 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -25846,25 +26650,25 @@ void parser_prod___AStarshipExpr___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:4941 */
+      /* ./parser//parser_prod.nit:5090 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4941);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5090);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4942 */
+      /* ./parser//parser_prod.nit:5091 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4942);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5091);
       }
-      /* ./parser//parser_prod.nit:4943 */
+      /* ./parser//parser_prod.nit:5092 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4945 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4945);
+      /* ./parser//parser_prod.nit:5094 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5094);
     }
-    /* ./parser//parser_prod.nit:4947 */
+    /* ./parser//parser_prod.nit:5096 */
     goto label1;
   }
   label1: while(0);
@@ -25877,7 +26681,7 @@ void parser_prod___AStarshipExpr___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_prod;
-  fra.me.line = 4951;
+  fra.me.line = 5100;
   fra.me.meth = LOCATE_parser_prod___AStarshipExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25886,19 +26690,19 @@ void 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:4953 */
+  /* ./parser//parser_prod.nit:5102 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4953);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5102);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4954 */
+  /* ./parser//parser_prod.nit:5103 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4954);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5103);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -25906,31 +26710,31 @@ void parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
-  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos171]) return;
+  if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4958;
+  fra.me.line = 5107;
   fra.me.meth = LOCATE_parser_prod___AStarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos171] = 1;
+  init_table[itpos173] = 1;
   return;
 }
 void parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos172]) return;
+  if (init_table[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4960;
+  fra.me.line = 5109;
   fra.me.meth = LOCATE_parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25940,36 +26744,36 @@ void parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t p2, int*
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4965 */
+  /* ./parser//parser_prod.nit:5114 */
   CALL_parser_prod___AStarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4966 */
+  /* ./parser//parser_prod.nit:5115 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4966);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5115);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4967 */
+  /* ./parser//parser_prod.nit:5116 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4967);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5116);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4968 */
+  /* ./parser//parser_prod.nit:5117 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4968);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5117);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:4969 */
+  /* ./parser//parser_prod.nit:5118 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4969);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5118);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos172] = 1;
+  init_table[itpos174] = 1;
   return;
 }
 void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25979,7 +26783,7 @@ void parser_prod___AStarExpr___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_prod;
-  fra.me.line = 4972;
+  fra.me.line = 5121;
   fra.me.meth = LOCATE_parser_prod___AStarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25990,11 +26794,11 @@ void parser_prod___AStarExpr___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:4974 */
+  /* ./parser//parser_prod.nit:5123 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4974);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5123);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26004,7 +26808,7 @@ void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4975 */
+    /* ./parser//parser_prod.nit:5124 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26019,32 +26823,32 @@ void parser_prod___AStarExpr___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:4976 */
+      /* ./parser//parser_prod.nit:5125 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4976);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5125);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4977 */
+      /* ./parser//parser_prod.nit:5126 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4977);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5126);
       }
-      /* ./parser//parser_prod.nit:4978 */
+      /* ./parser//parser_prod.nit:5127 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4980 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4980);
+      /* ./parser//parser_prod.nit:5129 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5129);
     }
-    /* ./parser//parser_prod.nit:4982 */
+    /* ./parser//parser_prod.nit:5131 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:4984 */
+  /* ./parser//parser_prod.nit:5133 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4984);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5133);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26054,7 +26858,7 @@ void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:4985 */
+    /* ./parser//parser_prod.nit:5134 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26069,25 +26873,25 @@ void parser_prod___AStarExpr___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:4986 */
+      /* ./parser//parser_prod.nit:5135 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4986);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5135);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4987 */
+      /* ./parser//parser_prod.nit:5136 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4987);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5136);
       }
-      /* ./parser//parser_prod.nit:4988 */
+      /* ./parser//parser_prod.nit:5137 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4990 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4990);
+      /* ./parser//parser_prod.nit:5139 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5139);
     }
-    /* ./parser//parser_prod.nit:4992 */
+    /* ./parser//parser_prod.nit:5141 */
     goto label1;
   }
   label1: while(0);
@@ -26100,7 +26904,7 @@ void parser_prod___AStarExpr___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_prod;
-  fra.me.line = 4996;
+  fra.me.line = 5145;
   fra.me.meth = LOCATE_parser_prod___AStarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26109,19 +26913,19 @@ void 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:4998 */
+  /* ./parser//parser_prod.nit:5147 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4998);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5147);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4999 */
+  /* ./parser//parser_prod.nit:5148 */
   REGB0 = TAG_Bool(ATTR_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_prod, 4999);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5148);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26129,31 +26933,31 @@ void parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
-  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
+  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos173]) return;
+  if (init_table[itpos175]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5003;
+  fra.me.line = 5152;
   fra.me.meth = LOCATE_parser_prod___ASlashExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos173] = 1;
+  init_table[itpos175] = 1;
   return;
 }
 void parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
+  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos174]) return;
+  if (init_table[itpos176]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5005;
+  fra.me.line = 5154;
   fra.me.meth = LOCATE_parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26163,36 +26967,36 @@ void parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5010 */
+  /* ./parser//parser_prod.nit:5159 */
   CALL_parser_prod___ASlashExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5011 */
+  /* ./parser//parser_prod.nit:5160 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5011);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5160);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5012 */
+  /* ./parser//parser_prod.nit:5161 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5012);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5161);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5013 */
+  /* ./parser//parser_prod.nit:5162 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5013);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5162);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5014 */
+  /* ./parser//parser_prod.nit:5163 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5014);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5163);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos174] = 1;
+  init_table[itpos176] = 1;
   return;
 }
 void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -26202,7 +27006,7 @@ void parser_prod___ASlashExpr___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_prod;
-  fra.me.line = 5017;
+  fra.me.line = 5166;
   fra.me.meth = LOCATE_parser_prod___ASlashExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26213,11 +27017,11 @@ void parser_prod___ASlashExpr___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:5019 */
+  /* ./parser//parser_prod.nit:5168 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5019);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5168);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26227,7 +27031,7 @@ void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5020 */
+    /* ./parser//parser_prod.nit:5169 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26242,32 +27046,32 @@ void parser_prod___ASlashExpr___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:5021 */
+      /* ./parser//parser_prod.nit:5170 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5021);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5170);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5022 */
+      /* ./parser//parser_prod.nit:5171 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5022);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5171);
       }
-      /* ./parser//parser_prod.nit:5023 */
+      /* ./parser//parser_prod.nit:5172 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5025 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5025);
+      /* ./parser//parser_prod.nit:5174 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5174);
     }
-    /* ./parser//parser_prod.nit:5027 */
+    /* ./parser//parser_prod.nit:5176 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5029 */
+  /* ./parser//parser_prod.nit:5178 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5029);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5178);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26277,7 +27081,7 @@ void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5030 */
+    /* ./parser//parser_prod.nit:5179 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26292,25 +27096,25 @@ void parser_prod___ASlashExpr___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:5031 */
+      /* ./parser//parser_prod.nit:5180 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5031);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5180);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5032 */
+      /* ./parser//parser_prod.nit:5181 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5032);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5181);
       }
-      /* ./parser//parser_prod.nit:5033 */
+      /* ./parser//parser_prod.nit:5182 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5035 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5035);
+      /* ./parser//parser_prod.nit:5184 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5184);
     }
-    /* ./parser//parser_prod.nit:5037 */
+    /* ./parser//parser_prod.nit:5186 */
     goto label1;
   }
   label1: while(0);
@@ -26323,7 +27127,7 @@ void parser_prod___ASlashExpr___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_prod;
-  fra.me.line = 5041;
+  fra.me.line = 5190;
   fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26332,19 +27136,19 @@ void 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:5043 */
+  /* ./parser//parser_prod.nit:5192 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5043);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5192);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5044 */
+  /* ./parser//parser_prod.nit:5193 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5044);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5193);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26352,31 +27156,31 @@ void parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___APercentExpr___empty_init(val_t p0, int* init_table){
-  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos175]) return;
+  if (init_table[itpos177]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5048;
+  fra.me.line = 5197;
   fra.me.meth = LOCATE_parser_prod___APercentExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos175] = 1;
+  init_table[itpos177] = 1;
   return;
 }
 void parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos176]) return;
+  if (init_table[itpos178]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5050;
+  fra.me.line = 5199;
   fra.me.meth = LOCATE_parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26386,36 +27190,36 @@ void parser_prod___APercentExpr___init_apercentexpr(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:5055 */
+  /* ./parser//parser_prod.nit:5204 */
   CALL_parser_prod___APercentExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5056 */
+  /* ./parser//parser_prod.nit:5205 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5056);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5205);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5057 */
+  /* ./parser//parser_prod.nit:5206 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5057);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5206);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5058 */
+  /* ./parser//parser_prod.nit:5207 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5058);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5207);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5059 */
+  /* ./parser//parser_prod.nit:5208 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5059);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5208);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos176] = 1;
+  init_table[itpos178] = 1;
   return;
 }
 void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -26425,7 +27229,7 @@ void parser_prod___APercentExpr___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_prod;
-  fra.me.line = 5062;
+  fra.me.line = 5211;
   fra.me.meth = LOCATE_parser_prod___APercentExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26436,11 +27240,11 @@ void parser_prod___APercentExpr___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:5064 */
+  /* ./parser//parser_prod.nit:5213 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5064);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5213);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26450,7 +27254,7 @@ void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5065 */
+    /* ./parser//parser_prod.nit:5214 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26465,32 +27269,32 @@ void parser_prod___APercentExpr___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:5066 */
+      /* ./parser//parser_prod.nit:5215 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5066);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5215);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5067 */
+      /* ./parser//parser_prod.nit:5216 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5067);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5216);
       }
-      /* ./parser//parser_prod.nit:5068 */
+      /* ./parser//parser_prod.nit:5217 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5070 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5070);
+      /* ./parser//parser_prod.nit:5219 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5219);
     }
-    /* ./parser//parser_prod.nit:5072 */
+    /* ./parser//parser_prod.nit:5221 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5074 */
+  /* ./parser//parser_prod.nit:5223 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5074);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5223);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26500,7 +27304,7 @@ void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5075 */
+    /* ./parser//parser_prod.nit:5224 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26515,25 +27319,25 @@ void parser_prod___APercentExpr___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:5076 */
+      /* ./parser//parser_prod.nit:5225 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5076);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5225);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5077 */
+      /* ./parser//parser_prod.nit:5226 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5077);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5226);
       }
-      /* ./parser//parser_prod.nit:5078 */
+      /* ./parser//parser_prod.nit:5227 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5080 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5080);
+      /* ./parser//parser_prod.nit:5229 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5229);
     }
-    /* ./parser//parser_prod.nit:5082 */
+    /* ./parser//parser_prod.nit:5231 */
     goto label1;
   }
   label1: while(0);
@@ -26546,7 +27350,7 @@ void parser_prod___APercentExpr___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_prod;
-  fra.me.line = 5086;
+  fra.me.line = 5235;
   fra.me.meth = LOCATE_parser_prod___APercentExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26555,19 +27359,19 @@ void 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:5088 */
+  /* ./parser//parser_prod.nit:5237 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5088);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5237);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5089 */
+  /* ./parser//parser_prod.nit:5238 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5089);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5238);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26575,31 +27379,31 @@ void parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
-  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos177]) return;
+  if (init_table[itpos179]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5093;
+  fra.me.line = 5242;
   fra.me.meth = LOCATE_parser_prod___AUminusExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos177] = 1;
+  init_table[itpos179] = 1;
   return;
 }
 void parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos178]) return;
+  if (init_table[itpos180]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5095;
+  fra.me.line = 5244;
   fra.me.meth = LOCATE_parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26609,36 +27413,36 @@ void parser_prod___AUminusExpr___init_auminusexpr(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:5100 */
+  /* ./parser//parser_prod.nit:5249 */
   CALL_parser_prod___AUminusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5101 */
+  /* ./parser//parser_prod.nit:5250 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5101);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5250);
   }
   ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5102 */
+  /* ./parser//parser_prod.nit:5251 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5102);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5251);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5103 */
+  /* ./parser//parser_prod.nit:5252 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5103);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5252);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5104 */
+  /* ./parser//parser_prod.nit:5253 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5104);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5253);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos178] = 1;
+  init_table[itpos180] = 1;
   return;
 }
 void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -26648,7 +27452,7 @@ void parser_prod___AUminusExpr___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_prod;
-  fra.me.line = 5107;
+  fra.me.line = 5256;
   fra.me.meth = LOCATE_parser_prod___AUminusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26659,11 +27463,11 @@ void parser_prod___AUminusExpr___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:5109 */
+  /* ./parser//parser_prod.nit:5258 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5109);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 5258);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26673,7 +27477,7 @@ void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5110 */
+    /* ./parser//parser_prod.nit:5259 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26688,32 +27492,32 @@ void parser_prod___AUminusExpr___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:5111 */
+      /* ./parser//parser_prod.nit:5260 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5111);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5260);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5112 */
+      /* ./parser//parser_prod.nit:5261 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5112);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5261);
       }
-      /* ./parser//parser_prod.nit:5113 */
+      /* ./parser//parser_prod.nit:5262 */
       ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5115 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5115);
+      /* ./parser//parser_prod.nit:5264 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5264);
     }
-    /* ./parser//parser_prod.nit:5117 */
+    /* ./parser//parser_prod.nit:5266 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5119 */
+  /* ./parser//parser_prod.nit:5268 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5119);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5268);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26723,7 +27527,7 @@ void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5120 */
+    /* ./parser//parser_prod.nit:5269 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26738,25 +27542,25 @@ void parser_prod___AUminusExpr___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:5121 */
+      /* ./parser//parser_prod.nit:5270 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5121);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5270);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5122 */
+      /* ./parser//parser_prod.nit:5271 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5122);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5271);
       }
-      /* ./parser//parser_prod.nit:5123 */
+      /* ./parser//parser_prod.nit:5272 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5125 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5125);
+      /* ./parser//parser_prod.nit:5274 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5274);
     }
-    /* ./parser//parser_prod.nit:5127 */
+    /* ./parser//parser_prod.nit:5276 */
     goto label1;
   }
   label1: while(0);
@@ -26769,7 +27573,7 @@ void parser_prod___AUminusExpr___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_prod;
-  fra.me.line = 5131;
+  fra.me.line = 5280;
   fra.me.meth = LOCATE_parser_prod___AUminusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26778,19 +27582,19 @@ void 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:5133 */
+  /* ./parser//parser_prod.nit:5282 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5133);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 5282);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5134 */
+  /* ./parser//parser_prod.nit:5283 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5134);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5283);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -26798,32 +27602,32 @@ void parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
-  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos179]) return;
+  if (init_table[itpos181]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5138;
+  fra.me.line = 5287;
   fra.me.meth = LOCATE_parser_prod___ANewExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos179] = 1;
+  init_table[itpos181] = 1;
   return;
 }
 void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].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[itpos180]) return;
+  if (init_table[itpos182]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5140;
+  fra.me.line = 5289;
   fra.me.meth = LOCATE_parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -26837,37 +27641,37 @@ void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5147 */
+  /* ./parser//parser_prod.nit:5296 */
   CALL_parser_prod___ANewExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5148 */
+  /* ./parser//parser_prod.nit:5297 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5148);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5297);
   }
   ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5149 */
+  /* ./parser//parser_prod.nit:5298 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5149);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5298);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5150 */
+  /* ./parser//parser_prod.nit:5299 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5150);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5299);
   }
   ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5151 */
+  /* ./parser//parser_prod.nit:5300 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5151);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5300);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5152 */
+  /* ./parser//parser_prod.nit:5301 */
   ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5153 */
+  /* ./parser//parser_prod.nit:5302 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26882,16 +27686,16 @@ void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5154 */
+    /* ./parser//parser_prod.nit:5303 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5154);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5303);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
   CALL_abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser_prod___ANewExpr___init_anewexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos180] = 1;
+  init_table[itpos182] = 1;
   return;
 }
   void OC_parser_prod___ANewExpr___init_anewexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -26899,7 +27703,7 @@ void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5156 */
+    /* ./parser//parser_prod.nit:5305 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -26912,21 +27716,21 @@ void parser_prod___ANewExpr___init_anewexpr(val_t p0, val_t p1, val_t p2, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5157 */
+    /* ./parser//parser_prod.nit:5306 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5157);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5306);
     }
-    /* ./parser//parser_prod.nit:5158 */
+    /* ./parser//parser_prod.nit:5307 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5158);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5307);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ANewExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5159 */
+    /* ./parser//parser_prod.nit:5308 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -26941,7 +27745,7 @@ void parser_prod___ANewExpr___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_prod;
-  fra.me.line = 5163;
+  fra.me.line = 5312;
   fra.me.meth = LOCATE_parser_prod___ANewExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26952,11 +27756,11 @@ void parser_prod___ANewExpr___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:5165 */
+  /* ./parser//parser_prod.nit:5314 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5165);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser_prod, 5314);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -26966,7 +27770,7 @@ void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5166 */
+    /* ./parser//parser_prod.nit:5315 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -26981,32 +27785,32 @@ void parser_prod___ANewExpr___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:5167 */
+      /* ./parser//parser_prod.nit:5316 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5167);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5316);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5168 */
+      /* ./parser//parser_prod.nit:5317 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnew, ID_TKwnew)) /*cast TKwnew*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5168);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5317);
       }
-      /* ./parser//parser_prod.nit:5169 */
+      /* ./parser//parser_prod.nit:5318 */
       ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5171 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5171);
+      /* ./parser//parser_prod.nit:5320 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5320);
     }
-    /* ./parser//parser_prod.nit:5173 */
+    /* ./parser//parser_prod.nit:5322 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5175 */
+  /* ./parser//parser_prod.nit:5324 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5175);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 5324);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27016,7 +27820,7 @@ void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5176 */
+    /* ./parser//parser_prod.nit:5325 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27031,28 +27835,28 @@ void parser_prod___ANewExpr___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:5177 */
+      /* ./parser//parser_prod.nit:5326 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5177);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5326);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5178 */
+      /* ./parser//parser_prod.nit:5327 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5178);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5327);
       }
-      /* ./parser//parser_prod.nit:5179 */
+      /* ./parser//parser_prod.nit:5328 */
       ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5181 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5181);
+      /* ./parser//parser_prod.nit:5330 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5330);
     }
-    /* ./parser//parser_prod.nit:5183 */
+    /* ./parser//parser_prod.nit:5332 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5185 */
+  /* ./parser//parser_prod.nit:5334 */
   fra.me.REG[3] = ATTR_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)) {
@@ -27067,7 +27871,7 @@ void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5186 */
+    /* ./parser//parser_prod.nit:5335 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27082,33 +27886,33 @@ void parser_prod___ANewExpr___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:5187 */
+      /* ./parser//parser_prod.nit:5336 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5187);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5336);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5188 */
+      /* ./parser//parser_prod.nit:5337 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5188);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5337);
       }
-      /* ./parser//parser_prod.nit:5189 */
+      /* ./parser//parser_prod.nit:5338 */
       ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5191 */
+      /* ./parser//parser_prod.nit:5340 */
       ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5193 */
+    /* ./parser//parser_prod.nit:5342 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5195 */
+  /* ./parser//parser_prod.nit:5344 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5195);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5344);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -27118,13 +27922,13 @@ void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5195 */
+      /* ./parser//parser_prod.nit:5344 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5196 */
+      /* ./parser//parser_prod.nit:5345 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5196);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5345);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -27141,7 +27945,7 @@ void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5197 */
+        /* ./parser//parser_prod.nit:5346 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -27156,37 +27960,37 @@ void parser_prod___ANewExpr___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:5198 */
+          /* ./parser//parser_prod.nit:5347 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5198);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5347);
           }
-          /* ./parser//parser_prod.nit:5199 */
+          /* ./parser//parser_prod.nit:5348 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5199);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5348);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5200 */
+          /* ./parser//parser_prod.nit:5349 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5200);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5349);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5202 */
+          /* ./parser//parser_prod.nit:5351 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5202);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5351);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5204 */
+        /* ./parser//parser_prod.nit:5353 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -27212,7 +28016,7 @@ void 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_prod;
-  fra.me.line = 5209;
+  fra.me.line = 5358;
   fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27221,23 +28025,23 @@ void parser_prod___ANewExpr___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:5211 */
+  /* ./parser//parser_prod.nit:5360 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5211);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser_prod, 5360);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5212 */
+  /* ./parser//parser_prod.nit:5361 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5212);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 5361);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5213 */
+  /* ./parser//parser_prod.nit:5362 */
   fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -27253,20 +28057,20 @@ void 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:5214 */
+    /* ./parser//parser_prod.nit:5363 */
     fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5214);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5363);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:5216 */
+  /* ./parser//parser_prod.nit:5365 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5216);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5365);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ANewExpr___visit_all_1));
@@ -27288,37 +28092,37 @@ void parser_prod___ANewExpr___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:5217 */
+    /* ./parser//parser_prod.nit:5366 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
-  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos181]) return;
+  if (init_table[itpos183]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5222;
+  fra.me.line = 5371;
   fra.me.meth = LOCATE_parser_prod___AAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos181] = 1;
+  init_table[itpos183] = 1;
   return;
 }
 void parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos182]) return;
+  if (init_table[itpos184]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5224;
+  fra.me.line = 5373;
   fra.me.meth = LOCATE_parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27328,36 +28132,36 @@ void parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t p2, int*
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5229 */
+  /* ./parser//parser_prod.nit:5378 */
   CALL_parser_prod___AAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5230 */
+  /* ./parser//parser_prod.nit:5379 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5230);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5379);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5231 */
+  /* ./parser//parser_prod.nit:5380 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5231);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5380);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5232 */
+  /* ./parser//parser_prod.nit:5381 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5232);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5381);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5233 */
+  /* ./parser//parser_prod.nit:5382 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5233);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5382);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos182] = 1;
+  init_table[itpos184] = 1;
   return;
 }
 void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -27367,7 +28171,7 @@ void parser_prod___AAttrExpr___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_prod;
-  fra.me.line = 5236;
+  fra.me.line = 5385;
   fra.me.meth = LOCATE_parser_prod___AAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27378,11 +28182,11 @@ void parser_prod___AAttrExpr___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:5238 */
+  /* ./parser//parser_prod.nit:5387 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5238);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5387);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27392,7 +28196,7 @@ void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5239 */
+    /* ./parser//parser_prod.nit:5388 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27407,32 +28211,32 @@ void parser_prod___AAttrExpr___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:5240 */
+      /* ./parser//parser_prod.nit:5389 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5240);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5389);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5241 */
+      /* ./parser//parser_prod.nit:5390 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5241);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5390);
       }
-      /* ./parser//parser_prod.nit:5242 */
+      /* ./parser//parser_prod.nit:5391 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5244 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5244);
+      /* ./parser//parser_prod.nit:5393 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5393);
     }
-    /* ./parser//parser_prod.nit:5246 */
+    /* ./parser//parser_prod.nit:5395 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5248 */
+  /* ./parser//parser_prod.nit:5397 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5248);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5397);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27442,7 +28246,7 @@ void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5249 */
+    /* ./parser//parser_prod.nit:5398 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27457,25 +28261,25 @@ void parser_prod___AAttrExpr___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:5250 */
+      /* ./parser//parser_prod.nit:5399 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5250);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5399);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5251 */
+      /* ./parser//parser_prod.nit:5400 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5251);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5400);
       }
-      /* ./parser//parser_prod.nit:5252 */
+      /* ./parser//parser_prod.nit:5401 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5254 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5254);
+      /* ./parser//parser_prod.nit:5403 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5403);
     }
-    /* ./parser//parser_prod.nit:5256 */
+    /* ./parser//parser_prod.nit:5405 */
     goto label1;
   }
   label1: while(0);
@@ -27488,7 +28292,7 @@ void parser_prod___AAttrExpr___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_prod;
-  fra.me.line = 5260;
+  fra.me.line = 5409;
   fra.me.meth = LOCATE_parser_prod___AAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27497,19 +28301,19 @@ void 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:5262 */
+  /* ./parser//parser_prod.nit:5411 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5262);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5411);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5263 */
+  /* ./parser//parser_prod.nit:5412 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5263);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5412);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27517,31 +28321,31 @@ void parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos183]) return;
+  if (init_table[itpos185]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5267;
+  fra.me.line = 5416;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos183] = 1;
+  init_table[itpos185] = 1;
   return;
 }
 void parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+  int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos184]) return;
+  if (init_table[itpos186]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5269;
+  fra.me.line = 5418;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___init_aattrassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -27555,62 +28359,62 @@ void parser_prod___AAttrAssignExpr___init_aattrassignexpr(val_t p0, val_t p1, va
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5276 */
+  /* ./parser//parser_prod.nit:5425 */
   CALL_parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5277 */
+  /* ./parser//parser_prod.nit:5426 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5277);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5426);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5278 */
+  /* ./parser//parser_prod.nit:5427 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5278);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5427);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5279 */
+  /* ./parser//parser_prod.nit:5428 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5279);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5428);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5280 */
+  /* ./parser//parser_prod.nit:5429 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5280);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5429);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5281 */
+  /* ./parser//parser_prod.nit:5430 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5281);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5430);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5282 */
+  /* ./parser//parser_prod.nit:5431 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5282);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5431);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5283 */
+  /* ./parser//parser_prod.nit:5432 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5283);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5432);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5284 */
+  /* ./parser//parser_prod.nit:5433 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5284);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5433);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos184] = 1;
+  init_table[itpos186] = 1;
   return;
 }
 void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -27620,7 +28424,7 @@ void parser_prod___AAttrAssignExpr___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_prod;
-  fra.me.line = 5287;
+  fra.me.line = 5436;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27631,11 +28435,11 @@ void parser_prod___AAttrAssignExpr___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:5289 */
+  /* ./parser//parser_prod.nit:5438 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5289);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5438);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27645,7 +28449,7 @@ void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5290 */
+    /* ./parser//parser_prod.nit:5439 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27660,32 +28464,32 @@ void parser_prod___AAttrAssignExpr___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:5291 */
+      /* ./parser//parser_prod.nit:5440 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5291);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5440);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5292 */
+      /* ./parser//parser_prod.nit:5441 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5292);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5441);
       }
-      /* ./parser//parser_prod.nit:5293 */
+      /* ./parser//parser_prod.nit:5442 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5295 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5295);
+      /* ./parser//parser_prod.nit:5444 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5444);
     }
-    /* ./parser//parser_prod.nit:5297 */
+    /* ./parser//parser_prod.nit:5446 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5299 */
+  /* ./parser//parser_prod.nit:5448 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5299);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5448);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27695,7 +28499,7 @@ void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5300 */
+    /* ./parser//parser_prod.nit:5449 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27710,32 +28514,32 @@ void parser_prod___AAttrAssignExpr___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:5301 */
+      /* ./parser//parser_prod.nit:5450 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5301);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5450);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5302 */
+      /* ./parser//parser_prod.nit:5451 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5302);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5451);
       }
-      /* ./parser//parser_prod.nit:5303 */
+      /* ./parser//parser_prod.nit:5452 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5305 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5305);
+      /* ./parser//parser_prod.nit:5454 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5454);
     }
-    /* ./parser//parser_prod.nit:5307 */
+    /* ./parser//parser_prod.nit:5456 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5309 */
+  /* ./parser//parser_prod.nit:5458 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5309);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5458);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27745,7 +28549,7 @@ void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5310 */
+    /* ./parser//parser_prod.nit:5459 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27760,32 +28564,32 @@ void parser_prod___AAttrAssignExpr___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:5311 */
+      /* ./parser//parser_prod.nit:5460 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5311);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5460);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5312 */
+      /* ./parser//parser_prod.nit:5461 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5312);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5461);
       }
-      /* ./parser//parser_prod.nit:5313 */
+      /* ./parser//parser_prod.nit:5462 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5315 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5315);
+      /* ./parser//parser_prod.nit:5464 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5464);
     }
-    /* ./parser//parser_prod.nit:5317 */
+    /* ./parser//parser_prod.nit:5466 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5319 */
+  /* ./parser//parser_prod.nit:5468 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5319);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5468);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -27795,7 +28599,7 @@ void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5320 */
+    /* ./parser//parser_prod.nit:5469 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -27810,25 +28614,25 @@ void parser_prod___AAttrAssignExpr___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:5321 */
+      /* ./parser//parser_prod.nit:5470 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5321);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5470);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5322 */
+      /* ./parser//parser_prod.nit:5471 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5322);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5471);
       }
-      /* ./parser//parser_prod.nit:5323 */
+      /* ./parser//parser_prod.nit:5472 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5325 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5325);
+      /* ./parser//parser_prod.nit:5474 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5474);
     }
-    /* ./parser//parser_prod.nit:5327 */
+    /* ./parser//parser_prod.nit:5476 */
     goto label1;
   }
   label1: while(0);
@@ -27841,7 +28645,7 @@ void parser_prod___AAttrAssignExpr___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_prod;
-  fra.me.line = 5331;
+  fra.me.line = 5480;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27850,35 +28654,35 @@ void 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:5333 */
+  /* ./parser//parser_prod.nit:5482 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5333);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5482);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5334 */
+  /* ./parser//parser_prod.nit:5483 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5334);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5483);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5335 */
+  /* ./parser//parser_prod.nit:5484 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5335);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5484);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5336 */
+  /* ./parser//parser_prod.nit:5485 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5336);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5485);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -27886,31 +28690,31 @@ void parser_prod___AAttrAssignExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
+  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos185]) return;
+  if (init_table[itpos187]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5340;
+  fra.me.line = 5489;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos185] = 1;
+  init_table[itpos187] = 1;
   return;
 }
 void parser_prod___AAttrReassignExpr___init_aattrreassignexpr(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_AAttrReassignExpr].i;
+  int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos186]) return;
+  if (init_table[itpos188]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5342;
+  fra.me.line = 5491;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -27924,62 +28728,62 @@ void parser_prod___AAttrReassignExpr___init_aattrreassignexpr(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:5349 */
+  /* ./parser//parser_prod.nit:5498 */
   CALL_parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5350 */
+  /* ./parser//parser_prod.nit:5499 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5350);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5499);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5351 */
+  /* ./parser//parser_prod.nit:5500 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5351);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5500);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5352 */
+  /* ./parser//parser_prod.nit:5501 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5352);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5501);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5353 */
+  /* ./parser//parser_prod.nit:5502 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5353);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5502);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5354 */
+  /* ./parser//parser_prod.nit:5503 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5354);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5503);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5355 */
+  /* ./parser//parser_prod.nit:5504 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5355);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5504);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5356 */
+  /* ./parser//parser_prod.nit:5505 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5356);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5505);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5357 */
+  /* ./parser//parser_prod.nit:5506 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5357);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5506);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos186] = 1;
+  init_table[itpos188] = 1;
   return;
 }
 void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -27989,7 +28793,7 @@ void parser_prod___AAttrReassignExpr___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_prod;
-  fra.me.line = 5360;
+  fra.me.line = 5509;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28000,11 +28804,11 @@ void parser_prod___AAttrReassignExpr___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:5362 */
+  /* ./parser//parser_prod.nit:5511 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5362);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5511);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28014,7 +28818,7 @@ void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5363 */
+    /* ./parser//parser_prod.nit:5512 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28029,32 +28833,32 @@ void parser_prod___AAttrReassignExpr___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:5364 */
+      /* ./parser//parser_prod.nit:5513 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5364);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5513);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5365 */
+      /* ./parser//parser_prod.nit:5514 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5365);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5514);
       }
-      /* ./parser//parser_prod.nit:5366 */
+      /* ./parser//parser_prod.nit:5515 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5368 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5368);
+      /* ./parser//parser_prod.nit:5517 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5517);
     }
-    /* ./parser//parser_prod.nit:5370 */
+    /* ./parser//parser_prod.nit:5519 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5372 */
+  /* ./parser//parser_prod.nit:5521 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5372);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5521);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28064,7 +28868,7 @@ void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5373 */
+    /* ./parser//parser_prod.nit:5522 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28079,32 +28883,32 @@ void parser_prod___AAttrReassignExpr___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:5374 */
+      /* ./parser//parser_prod.nit:5523 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5374);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5523);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5375 */
+      /* ./parser//parser_prod.nit:5524 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5375);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5524);
       }
-      /* ./parser//parser_prod.nit:5376 */
+      /* ./parser//parser_prod.nit:5525 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5378 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5378);
+      /* ./parser//parser_prod.nit:5527 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5527);
     }
-    /* ./parser//parser_prod.nit:5380 */
+    /* ./parser//parser_prod.nit:5529 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5382 */
+  /* ./parser//parser_prod.nit:5531 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5382);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5531);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28114,7 +28918,7 @@ void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5383 */
+    /* ./parser//parser_prod.nit:5532 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28129,32 +28933,32 @@ void parser_prod___AAttrReassignExpr___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:5384 */
+      /* ./parser//parser_prod.nit:5533 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5384);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5533);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5385 */
+      /* ./parser//parser_prod.nit:5534 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5385);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5534);
       }
-      /* ./parser//parser_prod.nit:5386 */
+      /* ./parser//parser_prod.nit:5535 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5388 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5388);
+      /* ./parser//parser_prod.nit:5537 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5537);
     }
-    /* ./parser//parser_prod.nit:5390 */
+    /* ./parser//parser_prod.nit:5539 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5392 */
+  /* ./parser//parser_prod.nit:5541 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5392);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5541);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28164,7 +28968,7 @@ void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5393 */
+    /* ./parser//parser_prod.nit:5542 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28179,25 +28983,25 @@ void parser_prod___AAttrReassignExpr___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:5394 */
+      /* ./parser//parser_prod.nit:5543 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5394);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5543);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5395 */
+      /* ./parser//parser_prod.nit:5544 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5395);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5544);
       }
-      /* ./parser//parser_prod.nit:5396 */
+      /* ./parser//parser_prod.nit:5545 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5398 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5398);
+      /* ./parser//parser_prod.nit:5547 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5547);
     }
-    /* ./parser//parser_prod.nit:5400 */
+    /* ./parser//parser_prod.nit:5549 */
     goto label1;
   }
   label1: while(0);
@@ -28210,7 +29014,7 @@ void parser_prod___AAttrReassignExpr___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_prod;
-  fra.me.line = 5404;
+  fra.me.line = 5553;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28219,35 +29023,35 @@ void 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:5406 */
+  /* ./parser//parser_prod.nit:5555 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5406);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5555);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5407 */
+  /* ./parser//parser_prod.nit:5556 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5407);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5556);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5408 */
+  /* ./parser//parser_prod.nit:5557 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5408);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5557);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5409 */
+  /* ./parser//parser_prod.nit:5558 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5409);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5558);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -28255,31 +29059,31 @@ void parser_prod___AAttrReassignExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
-  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
+  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos187]) return;
+  if (init_table[itpos189]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5413;
+  fra.me.line = 5562;
   fra.me.meth = LOCATE_parser_prod___ACallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos187] = 1;
+  init_table[itpos189] = 1;
   return;
 }
 void parser_prod___ACallExpr___init_acallexpr(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_ACallExpr].i;
+  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos188]) return;
+  if (init_table[itpos190]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5415;
+  fra.me.line = 5564;
   fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -28293,38 +29097,38 @@ void parser_prod___ACallExpr___init_acallexpr(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:5422 */
+  /* ./parser//parser_prod.nit:5571 */
   CALL_parser_prod___ACallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5423 */
+  /* ./parser//parser_prod.nit:5572 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5423);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5572);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5424 */
+  /* ./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_prod, 5424);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5573);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5425 */
+  /* ./parser//parser_prod.nit:5574 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5425);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5574);
   }
   ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5426 */
+  /* ./parser//parser_prod.nit:5575 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5426);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5575);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ACallExpr___init_acallexpr_1));
   CALL_abstract_collection___Collection___iterate(fra.me.REG[4])(fra.me.REG[4], (&(fra.me)), ((fun_t)OC_parser_prod___ACallExpr___init_acallexpr_2));
   stack_frame_head = fra.me.prev;
-  init_table[itpos188] = 1;
+  init_table[itpos190] = 1;
   return;
 }
   void OC_parser_prod___ACallExpr___init_acallexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -28332,7 +29136,7 @@ void parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t p2, val_
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5427 */
+    /* ./parser//parser_prod.nit:5576 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -28345,21 +29149,21 @@ void parser_prod___ACallExpr___init_acallexpr(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:5428 */
+    /* ./parser//parser_prod.nit:5577 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5428);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5577);
     }
-    /* ./parser//parser_prod.nit:5429 */
+    /* ./parser//parser_prod.nit:5578 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5429);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5578);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5430 */
+    /* ./parser//parser_prod.nit:5579 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -28369,7 +29173,7 @@ void parser_prod___ACallExpr___init_acallexpr(val_t p0, val_t p1, val_t p2, val_
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5432 */
+    /* ./parser//parser_prod.nit:5581 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -28382,21 +29186,21 @@ void parser_prod___ACallExpr___init_acallexpr(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:5433 */
+    /* ./parser//parser_prod.nit:5582 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5433);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5582);
     }
-    /* ./parser//parser_prod.nit:5434 */
+    /* ./parser//parser_prod.nit:5583 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5434);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5583);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5435 */
+    /* ./parser//parser_prod.nit:5584 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -28411,7 +29215,7 @@ void parser_prod___ACallExpr___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_prod;
-  fra.me.line = 5439;
+  fra.me.line = 5588;
   fra.me.meth = LOCATE_parser_prod___ACallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28422,11 +29226,11 @@ void parser_prod___ACallExpr___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:5441 */
+  /* ./parser//parser_prod.nit:5590 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5441);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5590);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28436,7 +29240,7 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5442 */
+    /* ./parser//parser_prod.nit:5591 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28451,32 +29255,32 @@ void parser_prod___ACallExpr___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:5443 */
+      /* ./parser//parser_prod.nit:5592 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5443);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5592);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5444 */
+      /* ./parser//parser_prod.nit:5593 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5444);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5593);
       }
-      /* ./parser//parser_prod.nit:5445 */
+      /* ./parser//parser_prod.nit:5594 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5447 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5447);
+      /* ./parser//parser_prod.nit:5596 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5596);
     }
-    /* ./parser//parser_prod.nit:5449 */
+    /* ./parser//parser_prod.nit:5598 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5451 */
+  /* ./parser//parser_prod.nit:5600 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5451);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5600);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28486,7 +29290,7 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5452 */
+    /* ./parser//parser_prod.nit:5601 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28501,33 +29305,33 @@ void parser_prod___ACallExpr___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:5453 */
+      /* ./parser//parser_prod.nit:5602 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5453);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5602);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5454 */
+      /* ./parser//parser_prod.nit:5603 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5454);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5603);
       }
-      /* ./parser//parser_prod.nit:5455 */
+      /* ./parser//parser_prod.nit:5604 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5457 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5457);
+      /* ./parser//parser_prod.nit:5606 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5606);
     }
-    /* ./parser//parser_prod.nit:5459 */
+    /* ./parser//parser_prod.nit:5608 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5461 */
+  /* ./parser//parser_prod.nit:5610 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5461);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5610);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -28537,13 +29341,13 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5461 */
+      /* ./parser//parser_prod.nit:5610 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5462 */
+      /* ./parser//parser_prod.nit:5611 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5462);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5611);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -28560,7 +29364,7 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5463 */
+        /* ./parser//parser_prod.nit:5612 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -28575,37 +29379,37 @@ void parser_prod___ACallExpr___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:5464 */
+          /* ./parser//parser_prod.nit:5613 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5464);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5613);
           }
-          /* ./parser//parser_prod.nit:5465 */
+          /* ./parser//parser_prod.nit:5614 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5465);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5614);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5466 */
+          /* ./parser//parser_prod.nit:5615 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5466);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5615);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5468 */
+          /* ./parser//parser_prod.nit:5617 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5468);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5617);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5470 */
+        /* ./parser//parser_prod.nit:5619 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -28620,12 +29424,12 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:5473 */
+  /* ./parser//parser_prod.nit:5622 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 5473);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5622);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -28635,13 +29439,13 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5473 */
+      /* ./parser//parser_prod.nit:5622 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5474 */
+      /* ./parser//parser_prod.nit:5623 */
       REGB3 = TAG_Bool(ATTR_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_prod, 5474);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5623);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -28658,7 +29462,7 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5475 */
+        /* ./parser//parser_prod.nit:5624 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -28673,37 +29477,37 @@ void parser_prod___ACallExpr___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:5476 */
+          /* ./parser//parser_prod.nit:5625 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5476);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5625);
           }
-          /* ./parser//parser_prod.nit:5477 */
+          /* ./parser//parser_prod.nit:5626 */
           REGB3 = TAG_Bool(ATTR_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_prod, 5477);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5626);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5478 */
+          /* ./parser//parser_prod.nit:5627 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5478);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5627);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5480 */
+          /* ./parser//parser_prod.nit:5629 */
           REGB3 = TAG_Bool(ATTR_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_prod, 5480);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5629);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5482 */
+        /* ./parser//parser_prod.nit:5631 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -28728,7 +29532,7 @@ void parser_prod___ACallExpr___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_prod;
-  fra.me.line = 5487;
+  fra.me.line = 5636;
   fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28737,35 +29541,35 @@ void 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:5489 */
+  /* ./parser//parser_prod.nit:5638 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5489);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5638);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5490 */
+  /* ./parser//parser_prod.nit:5639 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5490);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5639);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5491 */
+  /* ./parser//parser_prod.nit:5640 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5491);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5640);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ACallExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5494 */
+  /* ./parser//parser_prod.nit:5643 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5494);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5643);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ACallExpr___visit_all_2));
@@ -28787,7 +29591,7 @@ void 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:5492 */
+    /* ./parser//parser_prod.nit:5641 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -28807,37 +29611,37 @@ void 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:5495 */
+    /* ./parser//parser_prod.nit:5644 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos189]) return;
+  if (init_table[itpos191]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5500;
+  fra.me.line = 5649;
   fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos189] = 1;
+  init_table[itpos191] = 1;
   return;
 }
 void 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 itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].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[itpos192]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5502;
+  fra.me.line = 5651;
   fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -28853,63 +29657,63 @@ void parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val_t p1, va
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:5510 */
+  /* ./parser//parser_prod.nit:5659 */
   CALL_parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5511 */
+  /* ./parser//parser_prod.nit:5660 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5511);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5660);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5512 */
+  /* ./parser//parser_prod.nit:5661 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5512);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5661);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5513 */
+  /* ./parser//parser_prod.nit:5662 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5513);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5662);
   }
   ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5514 */
+  /* ./parser//parser_prod.nit:5663 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5514);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5663);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ACallAssignExpr___init_acallassignexpr_1));
-  /* ./parser//parser_prod.nit:5520 */
+  /* ./parser//parser_prod.nit:5669 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5520);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5669);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5521 */
+  /* ./parser//parser_prod.nit:5670 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5521);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5670);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5522 */
+  /* ./parser//parser_prod.nit:5671 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5522);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5671);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:5523 */
+  /* ./parser//parser_prod.nit:5672 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5523);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5672);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos190] = 1;
+  init_table[itpos192] = 1;
   return;
 }
   void OC_parser_prod___ACallAssignExpr___init_acallassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -28917,7 +29721,7 @@ void parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val_t p1, va
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5515 */
+    /* ./parser//parser_prod.nit:5664 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -28930,21 +29734,21 @@ void parser_prod___ACallAssignExpr___init_acallassignexpr(val_t p0, val_t p1, va
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5516 */
+    /* ./parser//parser_prod.nit:5665 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5516);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5665);
     }
-    /* ./parser//parser_prod.nit:5517 */
+    /* ./parser//parser_prod.nit:5666 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5517);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5666);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5518 */
+    /* ./parser//parser_prod.nit:5667 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -28959,7 +29763,7 @@ void parser_prod___ACallAssignExpr___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_prod;
-  fra.me.line = 5526;
+  fra.me.line = 5675;
   fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28970,11 +29774,11 @@ void parser_prod___ACallAssignExpr___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:5528 */
+  /* ./parser//parser_prod.nit:5677 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5528);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5677);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -28984,7 +29788,7 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5529 */
+    /* ./parser//parser_prod.nit:5678 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -28999,32 +29803,32 @@ void parser_prod___ACallAssignExpr___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:5530 */
+      /* ./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_prod, 5530);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5679);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5531 */
+      /* ./parser//parser_prod.nit:5680 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5531);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5680);
       }
-      /* ./parser//parser_prod.nit:5532 */
+      /* ./parser//parser_prod.nit:5681 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5534 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5534);
+      /* ./parser//parser_prod.nit:5683 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5683);
     }
-    /* ./parser//parser_prod.nit:5536 */
+    /* ./parser//parser_prod.nit:5685 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5538 */
+  /* ./parser//parser_prod.nit:5687 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5538);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5687);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29034,7 +29838,7 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5539 */
+    /* ./parser//parser_prod.nit:5688 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29049,33 +29853,33 @@ void parser_prod___ACallAssignExpr___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:5540 */
+      /* ./parser//parser_prod.nit:5689 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5540);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5689);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5541 */
+      /* ./parser//parser_prod.nit:5690 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5541);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5690);
       }
-      /* ./parser//parser_prod.nit:5542 */
+      /* ./parser//parser_prod.nit:5691 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5544 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5544);
+      /* ./parser//parser_prod.nit:5693 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5693);
     }
-    /* ./parser//parser_prod.nit:5546 */
+    /* ./parser//parser_prod.nit:5695 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5548 */
+  /* ./parser//parser_prod.nit:5697 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5548);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5697);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -29085,13 +29889,13 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5548 */
+      /* ./parser//parser_prod.nit:5697 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5549 */
+      /* ./parser//parser_prod.nit:5698 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5549);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5698);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -29108,7 +29912,7 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5550 */
+        /* ./parser//parser_prod.nit:5699 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -29123,37 +29927,37 @@ void parser_prod___ACallAssignExpr___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:5551 */
+          /* ./parser//parser_prod.nit:5700 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5551);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5700);
           }
-          /* ./parser//parser_prod.nit:5552 */
+          /* ./parser//parser_prod.nit:5701 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5552);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5701);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5553 */
+          /* ./parser//parser_prod.nit:5702 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5553);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5702);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5555 */
+          /* ./parser//parser_prod.nit:5704 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5555);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5704);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5557 */
+        /* ./parser//parser_prod.nit:5706 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -29168,11 +29972,11 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:5560 */
+  /* ./parser//parser_prod.nit:5709 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5560);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5709);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29182,7 +29986,7 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5561 */
+    /* ./parser//parser_prod.nit:5710 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29197,32 +30001,32 @@ void parser_prod___ACallAssignExpr___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:5562 */
+      /* ./parser//parser_prod.nit:5711 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5562);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5711);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5563 */
+      /* ./parser//parser_prod.nit:5712 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5563);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5712);
       }
-      /* ./parser//parser_prod.nit:5564 */
+      /* ./parser//parser_prod.nit:5713 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5566 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5566);
+      /* ./parser//parser_prod.nit:5715 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5715);
     }
-    /* ./parser//parser_prod.nit:5568 */
+    /* ./parser//parser_prod.nit:5717 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5570 */
+  /* ./parser//parser_prod.nit:5719 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5570);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5719);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29232,7 +30036,7 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5571 */
+    /* ./parser//parser_prod.nit:5720 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29247,25 +30051,25 @@ void parser_prod___ACallAssignExpr___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:5572 */
+      /* ./parser//parser_prod.nit:5721 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5572);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5721);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5573 */
+      /* ./parser//parser_prod.nit:5722 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5573);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5722);
       }
-      /* ./parser//parser_prod.nit:5574 */
+      /* ./parser//parser_prod.nit:5723 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5576 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5576);
+      /* ./parser//parser_prod.nit:5725 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5725);
     }
-    /* ./parser//parser_prod.nit:5578 */
+    /* ./parser//parser_prod.nit:5727 */
     goto label1;
   }
   label1: while(0);
@@ -29278,7 +30082,7 @@ void parser_prod___ACallAssignExpr___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_prod;
-  fra.me.line = 5582;
+  fra.me.line = 5731;
   fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29287,43 +30091,43 @@ void 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:5584 */
+  /* ./parser//parser_prod.nit:5733 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5584);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5733);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5585 */
+  /* ./parser//parser_prod.nit:5734 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5585);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5734);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5586 */
+  /* ./parser//parser_prod.nit:5735 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5586);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5735);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ACallAssignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5589 */
+  /* ./parser//parser_prod.nit:5738 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5589);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5738);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5590 */
+  /* ./parser//parser_prod.nit:5739 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5590);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5739);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29345,37 +30149,37 @@ void parser_prod___ACallAssignExpr___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:5587 */
+    /* ./parser//parser_prod.nit:5736 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
+  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos191]) return;
+  if (init_table[itpos193]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5594;
+  fra.me.line = 5743;
   fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 1;
+  init_table[itpos193] = 1;
   return;
 }
 void 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 itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
+  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos192]) return;
+  if (init_table[itpos194]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5596;
+  fra.me.line = 5745;
   fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
@@ -29391,63 +30195,63 @@ void parser_prod___ACallReassignExpr___init_acallreassignexpr(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:5604 */
+  /* ./parser//parser_prod.nit:5753 */
   CALL_parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5605 */
+  /* ./parser//parser_prod.nit:5754 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5605);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5754);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5606 */
+  /* ./parser//parser_prod.nit:5755 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5606);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5755);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5607 */
+  /* ./parser//parser_prod.nit:5756 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5607);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5756);
   }
   ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5608 */
+  /* ./parser//parser_prod.nit:5757 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5608);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5757);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ACallReassignExpr___init_acallreassignexpr_1));
-  /* ./parser//parser_prod.nit:5614 */
+  /* ./parser//parser_prod.nit:5763 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5614);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5763);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5615 */
+  /* ./parser//parser_prod.nit:5764 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5615);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5764);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5616 */
+  /* ./parser//parser_prod.nit:5765 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5616);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5765);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:5617 */
+  /* ./parser//parser_prod.nit:5766 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5617);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5766);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos192] = 1;
+  init_table[itpos194] = 1;
   return;
 }
   void OC_parser_prod___ACallReassignExpr___init_acallreassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -29455,7 +30259,7 @@ void parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0, val_t p1
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5609 */
+    /* ./parser//parser_prod.nit:5758 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -29468,21 +30272,21 @@ void parser_prod___ACallReassignExpr___init_acallreassignexpr(val_t p0, val_t p1
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5610 */
+    /* ./parser//parser_prod.nit:5759 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5610);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5759);
     }
-    /* ./parser//parser_prod.nit:5611 */
+    /* ./parser//parser_prod.nit:5760 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5611);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5760);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5612 */
+    /* ./parser//parser_prod.nit:5761 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -29497,7 +30301,7 @@ void parser_prod___ACallReassignExpr___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_prod;
-  fra.me.line = 5620;
+  fra.me.line = 5769;
   fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29508,11 +30312,11 @@ void parser_prod___ACallReassignExpr___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:5622 */
+  /* ./parser//parser_prod.nit:5771 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5622);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5771);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29522,7 +30326,7 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5623 */
+    /* ./parser//parser_prod.nit:5772 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29537,32 +30341,32 @@ void parser_prod___ACallReassignExpr___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:5624 */
+      /* ./parser//parser_prod.nit:5773 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5624);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5773);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5625 */
+      /* ./parser//parser_prod.nit:5774 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5625);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5774);
       }
-      /* ./parser//parser_prod.nit:5626 */
+      /* ./parser//parser_prod.nit:5775 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5628 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5628);
+      /* ./parser//parser_prod.nit:5777 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5777);
     }
-    /* ./parser//parser_prod.nit:5630 */
+    /* ./parser//parser_prod.nit:5779 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5632 */
+  /* ./parser//parser_prod.nit:5781 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5632);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5781);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29572,7 +30376,7 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5633 */
+    /* ./parser//parser_prod.nit:5782 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29587,33 +30391,33 @@ void parser_prod___ACallReassignExpr___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:5634 */
+      /* ./parser//parser_prod.nit:5783 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5634);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5783);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5635 */
+      /* ./parser//parser_prod.nit:5784 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5635);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5784);
       }
-      /* ./parser//parser_prod.nit:5636 */
+      /* ./parser//parser_prod.nit:5785 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5638 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5638);
+      /* ./parser//parser_prod.nit:5787 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5787);
     }
-    /* ./parser//parser_prod.nit:5640 */
+    /* ./parser//parser_prod.nit:5789 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5642 */
+  /* ./parser//parser_prod.nit:5791 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5642);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5791);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -29623,13 +30427,13 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5642 */
+      /* ./parser//parser_prod.nit:5791 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5643 */
+      /* ./parser//parser_prod.nit:5792 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5643);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5792);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -29646,7 +30450,7 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5644 */
+        /* ./parser//parser_prod.nit:5793 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -29661,37 +30465,37 @@ void parser_prod___ACallReassignExpr___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:5645 */
+          /* ./parser//parser_prod.nit:5794 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5645);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5794);
           }
-          /* ./parser//parser_prod.nit:5646 */
+          /* ./parser//parser_prod.nit:5795 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5646);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5795);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5647 */
+          /* ./parser//parser_prod.nit:5796 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5647);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5796);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5649 */
+          /* ./parser//parser_prod.nit:5798 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5649);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5798);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5651 */
+        /* ./parser//parser_prod.nit:5800 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -29706,11 +30510,11 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:5654 */
+  /* ./parser//parser_prod.nit:5803 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5654);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5803);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29720,7 +30524,7 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5655 */
+    /* ./parser//parser_prod.nit:5804 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29735,32 +30539,32 @@ void parser_prod___ACallReassignExpr___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:5656 */
+      /* ./parser//parser_prod.nit:5805 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5656);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5805);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5657 */
+      /* ./parser//parser_prod.nit:5806 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5657);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5806);
       }
-      /* ./parser//parser_prod.nit:5658 */
+      /* ./parser//parser_prod.nit:5807 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5660 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5660);
+      /* ./parser//parser_prod.nit:5809 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5809);
     }
-    /* ./parser//parser_prod.nit:5662 */
+    /* ./parser//parser_prod.nit:5811 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5664 */
+  /* ./parser//parser_prod.nit:5813 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5664);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5813);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -29770,7 +30574,7 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5665 */
+    /* ./parser//parser_prod.nit:5814 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -29785,25 +30589,25 @@ void parser_prod___ACallReassignExpr___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:5666 */
+      /* ./parser//parser_prod.nit:5815 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5666);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5815);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5667 */
+      /* ./parser//parser_prod.nit:5816 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5667);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5816);
       }
-      /* ./parser//parser_prod.nit:5668 */
+      /* ./parser//parser_prod.nit:5817 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5670 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5670);
+      /* ./parser//parser_prod.nit:5819 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5819);
     }
-    /* ./parser//parser_prod.nit:5672 */
+    /* ./parser//parser_prod.nit:5821 */
     goto label1;
   }
   label1: while(0);
@@ -29816,7 +30620,7 @@ void parser_prod___ACallReassignExpr___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_prod;
-  fra.me.line = 5676;
+  fra.me.line = 5825;
   fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29825,43 +30629,43 @@ void 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:5678 */
+  /* ./parser//parser_prod.nit:5827 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5678);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5827);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5679 */
+  /* ./parser//parser_prod.nit:5828 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5679);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5828);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5680 */
+  /* ./parser//parser_prod.nit:5829 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5680);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5829);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ACallReassignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5683 */
+  /* ./parser//parser_prod.nit:5832 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5683);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5832);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5684 */
+  /* ./parser//parser_prod.nit:5833 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5684);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5833);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -29883,38 +30687,38 @@ void parser_prod___ACallReassignExpr___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:5681 */
+    /* ./parser//parser_prod.nit:5830 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
-  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos193]) return;
+  if (init_table[itpos195]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5688;
+  fra.me.line = 5837;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
+  init_table[itpos195] = 1;
   return;
 }
 void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].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[itpos194]) return;
+  if (init_table[itpos196]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5690;
+  fra.me.line = 5839;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29926,11 +30730,11 @@ void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, va
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5696 */
+  /* ./parser//parser_prod.nit:5845 */
   CALL_parser_prod___ASuperExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5697 */
+  /* ./parser//parser_prod.nit:5846 */
   ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5698 */
+  /* ./parser//parser_prod.nit:5847 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -29945,29 +30749,29 @@ void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5699 */
+    /* ./parser//parser_prod.nit:5848 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5699);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5848);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:5701 */
+  /* ./parser//parser_prod.nit:5850 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5701);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5850);
   }
   ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5702 */
+  /* ./parser//parser_prod.nit:5851 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5702);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5851);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperExpr___init_asuperexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos194] = 1;
+  init_table[itpos196] = 1;
   return;
 }
   void OC_parser_prod___ASuperExpr___init_asuperexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -29975,7 +30779,7 @@ void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, va
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5703 */
+    /* ./parser//parser_prod.nit:5852 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -29988,21 +30792,21 @@ void parser_prod___ASuperExpr___init_asuperexpr(val_t p0, val_t p1, val_t p2, va
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5704 */
+    /* ./parser//parser_prod.nit:5853 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5704);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5853);
     }
-    /* ./parser//parser_prod.nit:5705 */
+    /* ./parser//parser_prod.nit:5854 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5705);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5854);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASuperExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5706 */
+    /* ./parser//parser_prod.nit:5855 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -30017,7 +30821,7 @@ void parser_prod___ASuperExpr___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_prod;
-  fra.me.line = 5710;
+  fra.me.line = 5859;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30028,7 +30832,7 @@ void parser_prod___ASuperExpr___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:5712 */
+  /* ./parser//parser_prod.nit:5861 */
   fra.me.REG[3] = ATTR_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)) {
@@ -30043,7 +30847,7 @@ void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5713 */
+    /* ./parser//parser_prod.nit:5862 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30058,32 +30862,32 @@ void parser_prod___ASuperExpr___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:5714 */
+      /* ./parser//parser_prod.nit:5863 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5714);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5863);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5715 */
+      /* ./parser//parser_prod.nit:5864 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5715);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5864);
       }
-      /* ./parser//parser_prod.nit:5716 */
+      /* ./parser//parser_prod.nit:5865 */
       ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5718 */
+      /* ./parser//parser_prod.nit:5867 */
       ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5720 */
+    /* ./parser//parser_prod.nit:5869 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5722 */
+  /* ./parser//parser_prod.nit:5871 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5722);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 5871);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30093,7 +30897,7 @@ void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5723 */
+    /* ./parser//parser_prod.nit:5872 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30108,33 +30912,33 @@ void parser_prod___ASuperExpr___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:5724 */
+      /* ./parser//parser_prod.nit:5873 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5724);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5873);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5725 */
+      /* ./parser//parser_prod.nit:5874 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5725);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5874);
       }
-      /* ./parser//parser_prod.nit:5726 */
+      /* ./parser//parser_prod.nit:5875 */
       ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5728 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5728);
+      /* ./parser//parser_prod.nit:5877 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5877);
     }
-    /* ./parser//parser_prod.nit:5730 */
+    /* ./parser//parser_prod.nit:5879 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5732 */
+  /* ./parser//parser_prod.nit:5881 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5732);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5881);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -30144,13 +30948,13 @@ void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5732 */
+      /* ./parser//parser_prod.nit:5881 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5733 */
+      /* ./parser//parser_prod.nit:5882 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5733);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5882);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -30167,7 +30971,7 @@ void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5734 */
+        /* ./parser//parser_prod.nit:5883 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -30182,37 +30986,37 @@ void parser_prod___ASuperExpr___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:5735 */
+          /* ./parser//parser_prod.nit:5884 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5735);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5884);
           }
-          /* ./parser//parser_prod.nit:5736 */
+          /* ./parser//parser_prod.nit:5885 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5736);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5885);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5737 */
+          /* ./parser//parser_prod.nit:5886 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5737);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5886);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5739 */
+          /* ./parser//parser_prod.nit:5888 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5739);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5888);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5741 */
+        /* ./parser//parser_prod.nit:5890 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -30238,7 +31042,7 @@ void 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_prod;
-  fra.me.line = 5746;
+  fra.me.line = 5895;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30247,7 +31051,7 @@ void parser_prod___ASuperExpr___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:5748 */
+  /* ./parser//parser_prod.nit:5897 */
   fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -30263,28 +31067,28 @@ void 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:5749 */
+    /* ./parser//parser_prod.nit:5898 */
     fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5749);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5898);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:5751 */
+  /* ./parser//parser_prod.nit:5900 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5751);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 5900);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5752 */
+  /* ./parser//parser_prod.nit:5901 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5752);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5901);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperExpr___visit_all_1));
@@ -30306,37 +31110,37 @@ void parser_prod___ASuperExpr___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:5753 */
+    /* ./parser//parser_prod.nit:5902 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
-  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
+  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos195]) return;
+  if (init_table[itpos197]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5758;
+  fra.me.line = 5907;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 1;
+  init_table[itpos197] = 1;
   return;
 }
 void parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
+  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos196]) return;
+  if (init_table[itpos198]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5760;
+  fra.me.line = 5909;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30348,37 +31152,37 @@ void parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5766 */
+  /* ./parser//parser_prod.nit:5915 */
   CALL_parser_prod___AInitExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5767 */
+  /* ./parser//parser_prod.nit:5916 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5767);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5916);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5768 */
+  /* ./parser//parser_prod.nit:5917 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5768);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5917);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5769 */
+  /* ./parser//parser_prod.nit:5918 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5769);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5918);
   }
   ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:5770 */
+  /* ./parser//parser_prod.nit:5919 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5770);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5919);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___AInitExpr___init_ainitexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos196] = 1;
+  init_table[itpos198] = 1;
   return;
 }
   void OC_parser_prod___AInitExpr___init_ainitexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -30386,7 +31190,7 @@ void parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5771 */
+    /* ./parser//parser_prod.nit:5920 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -30399,21 +31203,21 @@ void parser_prod___AInitExpr___init_ainitexpr(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:5772 */
+    /* ./parser//parser_prod.nit:5921 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5772);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5921);
     }
-    /* ./parser//parser_prod.nit:5773 */
+    /* ./parser//parser_prod.nit:5922 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5773);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5922);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AInitExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5774 */
+    /* ./parser//parser_prod.nit:5923 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -30428,7 +31232,7 @@ void parser_prod___AInitExpr___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_prod;
-  fra.me.line = 5778;
+  fra.me.line = 5927;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30439,11 +31243,11 @@ void parser_prod___AInitExpr___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:5780 */
+  /* ./parser//parser_prod.nit:5929 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5780);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5929);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30453,7 +31257,7 @@ void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5781 */
+    /* ./parser//parser_prod.nit:5930 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30468,32 +31272,32 @@ void parser_prod___AInitExpr___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:5782 */
+      /* ./parser//parser_prod.nit:5931 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5782);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5931);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5783 */
+      /* ./parser//parser_prod.nit:5932 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5783);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5932);
       }
-      /* ./parser//parser_prod.nit:5784 */
+      /* ./parser//parser_prod.nit:5933 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5786 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5786);
+      /* ./parser//parser_prod.nit:5935 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5935);
     }
-    /* ./parser//parser_prod.nit:5788 */
+    /* ./parser//parser_prod.nit:5937 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5790 */
+  /* ./parser//parser_prod.nit:5939 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5790);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 5939);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30503,7 +31307,7 @@ void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5791 */
+    /* ./parser//parser_prod.nit:5940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30518,33 +31322,33 @@ void parser_prod___AInitExpr___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:5792 */
+      /* ./parser//parser_prod.nit:5941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5792);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5941);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5793 */
+      /* ./parser//parser_prod.nit:5942 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5793);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5942);
       }
-      /* ./parser//parser_prod.nit:5794 */
+      /* ./parser//parser_prod.nit:5943 */
       ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5796 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5796);
+      /* ./parser//parser_prod.nit:5945 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5945);
     }
-    /* ./parser//parser_prod.nit:5798 */
+    /* ./parser//parser_prod.nit:5947 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5800 */
+  /* ./parser//parser_prod.nit:5949 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5800);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5949);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -30554,13 +31358,13 @@ void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5800 */
+      /* ./parser//parser_prod.nit:5949 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5801 */
+      /* ./parser//parser_prod.nit:5950 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5801);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5950);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -30577,7 +31381,7 @@ void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5802 */
+        /* ./parser//parser_prod.nit:5951 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -30592,37 +31396,37 @@ void parser_prod___AInitExpr___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:5803 */
+          /* ./parser//parser_prod.nit:5952 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5803);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5952);
           }
-          /* ./parser//parser_prod.nit:5804 */
+          /* ./parser//parser_prod.nit:5953 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5804);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5953);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5805 */
+          /* ./parser//parser_prod.nit:5954 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5805);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5954);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5807 */
+          /* ./parser//parser_prod.nit:5956 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5807);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5956);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5809 */
+        /* ./parser//parser_prod.nit:5958 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -30647,7 +31451,7 @@ void parser_prod___AInitExpr___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_prod;
-  fra.me.line = 5814;
+  fra.me.line = 5963;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30656,27 +31460,27 @@ void 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:5816 */
+  /* ./parser//parser_prod.nit:5965 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5816);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5965);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5817 */
+  /* ./parser//parser_prod.nit:5966 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5817);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 5966);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5818 */
+  /* ./parser//parser_prod.nit:5967 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5818);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5967);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AInitExpr___visit_all_1));
@@ -30698,37 +31502,37 @@ void parser_prod___AInitExpr___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:5819 */
+    /* ./parser//parser_prod.nit:5968 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
-  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos197]) return;
+  if (init_table[itpos199]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5824;
+  fra.me.line = 5973;
   fra.me.meth = LOCATE_parser_prod___ABraExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 1;
+  init_table[itpos199] = 1;
   return;
 }
 void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos198]) return;
+  if (init_table[itpos200]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5826;
+  fra.me.line = 5975;
   fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30740,25 +31544,25 @@ void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5832 */
+  /* ./parser//parser_prod.nit:5981 */
   CALL_parser_prod___ABraExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5833 */
+  /* ./parser//parser_prod.nit:5982 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5833);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5982);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5834 */
+  /* ./parser//parser_prod.nit:5983 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5834);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5983);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraExpr___init_abraexpr_1));
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___ABraExpr___init_abraexpr_2));
   stack_frame_head = fra.me.prev;
-  init_table[itpos198] = 1;
+  init_table[itpos200] = 1;
   return;
 }
   void OC_parser_prod___ABraExpr___init_abraexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -30766,7 +31570,7 @@ void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5835 */
+    /* ./parser//parser_prod.nit:5984 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -30779,21 +31583,21 @@ void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5836 */
+    /* ./parser//parser_prod.nit:5985 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5836);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5985);
     }
-    /* ./parser//parser_prod.nit:5837 */
+    /* ./parser//parser_prod.nit:5986 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5837);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5986);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5838 */
+    /* ./parser//parser_prod.nit:5987 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -30803,7 +31607,7 @@ void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5840 */
+    /* ./parser//parser_prod.nit:5989 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -30816,21 +31620,21 @@ void parser_prod___ABraExpr___init_abraexpr(val_t p0, val_t p1, val_t p2, val_t
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5841 */
+    /* ./parser//parser_prod.nit:5990 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5841);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5990);
     }
-    /* ./parser//parser_prod.nit:5842 */
+    /* ./parser//parser_prod.nit:5991 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5842);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5991);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5843 */
+    /* ./parser//parser_prod.nit:5992 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -30845,7 +31649,7 @@ void parser_prod___ABraExpr___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_prod;
-  fra.me.line = 5847;
+  fra.me.line = 5996;
   fra.me.meth = LOCATE_parser_prod___ABraExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30856,11 +31660,11 @@ void parser_prod___ABraExpr___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:5849 */
+  /* ./parser//parser_prod.nit:5998 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5849);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5998);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -30870,7 +31674,7 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5850 */
+    /* ./parser//parser_prod.nit:5999 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -30885,33 +31689,33 @@ void parser_prod___ABraExpr___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:5851 */
+      /* ./parser//parser_prod.nit:6000 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5851);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6000);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5852 */
+      /* ./parser//parser_prod.nit:6001 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5852);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6001);
       }
-      /* ./parser//parser_prod.nit:5853 */
+      /* ./parser//parser_prod.nit:6002 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5855 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5855);
+      /* ./parser//parser_prod.nit:6004 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6004);
     }
-    /* ./parser//parser_prod.nit:5857 */
+    /* ./parser//parser_prod.nit:6006 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5859 */
+  /* ./parser//parser_prod.nit:6008 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5859);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6008);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -30921,13 +31725,13 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5859 */
+      /* ./parser//parser_prod.nit:6008 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5860 */
+      /* ./parser//parser_prod.nit:6009 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5860);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6009);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -30944,7 +31748,7 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5861 */
+        /* ./parser//parser_prod.nit:6010 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -30959,37 +31763,37 @@ void parser_prod___ABraExpr___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:5862 */
+          /* ./parser//parser_prod.nit:6011 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5862);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6011);
           }
-          /* ./parser//parser_prod.nit:5863 */
+          /* ./parser//parser_prod.nit:6012 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5863);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6012);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5864 */
+          /* ./parser//parser_prod.nit:6013 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5864);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6013);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5866 */
+          /* ./parser//parser_prod.nit:6015 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5866);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6015);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5868 */
+        /* ./parser//parser_prod.nit:6017 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -31004,12 +31808,12 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:5871 */
+  /* ./parser//parser_prod.nit:6020 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 5871);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6020);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -31019,13 +31823,13 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5871 */
+      /* ./parser//parser_prod.nit:6020 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5872 */
+      /* ./parser//parser_prod.nit:6021 */
       REGB3 = TAG_Bool(ATTR_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_prod, 5872);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6021);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -31042,7 +31846,7 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5873 */
+        /* ./parser//parser_prod.nit:6022 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -31057,37 +31861,37 @@ void parser_prod___ABraExpr___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:5874 */
+          /* ./parser//parser_prod.nit:6023 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5874);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6023);
           }
-          /* ./parser//parser_prod.nit:5875 */
+          /* ./parser//parser_prod.nit:6024 */
           REGB3 = TAG_Bool(ATTR_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_prod, 5875);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6024);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5876 */
+          /* ./parser//parser_prod.nit:6025 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5876);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6025);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5878 */
+          /* ./parser//parser_prod.nit:6027 */
           REGB3 = TAG_Bool(ATTR_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_prod, 5878);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6027);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5880 */
+        /* ./parser//parser_prod.nit:6029 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -31112,7 +31916,7 @@ void parser_prod___ABraExpr___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_prod;
-  fra.me.line = 5885;
+  fra.me.line = 6034;
   fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31121,27 +31925,27 @@ void 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:5887 */
+  /* ./parser//parser_prod.nit:6036 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5887);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6036);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5888 */
+  /* ./parser//parser_prod.nit:6037 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5888);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6037);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5891 */
+  /* ./parser//parser_prod.nit:6040 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5891);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6040);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ABraExpr___visit_all_2));
@@ -31163,7 +31967,7 @@ void 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:5889 */
+    /* ./parser//parser_prod.nit:6038 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -31183,37 +31987,37 @@ void 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:5892 */
+    /* ./parser//parser_prod.nit:6041 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
+  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos199]) return;
+  if (init_table[itpos201]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5897;
+  fra.me.line = 6046;
   fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 1;
+  init_table[itpos201] = 1;
   return;
 }
 void parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
+  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].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[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5899;
+  fra.me.line = 6048;
   fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -31227,50 +32031,50 @@ void parser_prod___ABraAssignExpr___init_abraassignexpr(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:5906 */
+  /* ./parser//parser_prod.nit:6055 */
   CALL_parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5907 */
+  /* ./parser//parser_prod.nit:6056 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5907);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6056);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5908 */
+  /* ./parser//parser_prod.nit:6057 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5908);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6057);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraAssignExpr___init_abraassignexpr_1));
-  /* ./parser//parser_prod.nit:5914 */
+  /* ./parser//parser_prod.nit:6063 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5914);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6063);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5915 */
+  /* ./parser//parser_prod.nit:6064 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5915);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6064);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5916 */
+  /* ./parser//parser_prod.nit:6065 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5916);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6065);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5917 */
+  /* ./parser//parser_prod.nit:6066 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5917);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6066);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos200] = 1;
+  init_table[itpos202] = 1;
   return;
 }
   void OC_parser_prod___ABraAssignExpr___init_abraassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -31278,7 +32082,7 @@ void parser_prod___ABraAssignExpr___init_abraassignexpr(val_t p0, val_t p1, val_
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5909 */
+    /* ./parser//parser_prod.nit:6058 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -31291,21 +32095,21 @@ void parser_prod___ABraAssignExpr___init_abraassignexpr(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:5910 */
+    /* ./parser//parser_prod.nit:6059 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5910);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6059);
     }
-    /* ./parser//parser_prod.nit:5911 */
+    /* ./parser//parser_prod.nit:6060 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5911);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6060);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5912 */
+    /* ./parser//parser_prod.nit:6061 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -31320,7 +32124,7 @@ void parser_prod___ABraAssignExpr___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_prod;
-  fra.me.line = 5920;
+  fra.me.line = 6069;
   fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31331,11 +32135,11 @@ void parser_prod___ABraAssignExpr___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:5922 */
+  /* ./parser//parser_prod.nit:6071 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5922);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6071);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31345,7 +32149,7 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5923 */
+    /* ./parser//parser_prod.nit:6072 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31360,33 +32164,33 @@ void parser_prod___ABraAssignExpr___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:5924 */
+      /* ./parser//parser_prod.nit:6073 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5924);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6073);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5925 */
+      /* ./parser//parser_prod.nit:6074 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5925);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6074);
       }
-      /* ./parser//parser_prod.nit:5926 */
+      /* ./parser//parser_prod.nit:6075 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5928 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5928);
+      /* ./parser//parser_prod.nit:6077 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6077);
     }
-    /* ./parser//parser_prod.nit:5930 */
+    /* ./parser//parser_prod.nit:6079 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5932 */
+  /* ./parser//parser_prod.nit:6081 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5932);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6081);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -31396,13 +32200,13 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:5932 */
+      /* ./parser//parser_prod.nit:6081 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:5933 */
+      /* ./parser//parser_prod.nit:6082 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5933);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6082);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -31419,7 +32223,7 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:5934 */
+        /* ./parser//parser_prod.nit:6083 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -31434,37 +32238,37 @@ void parser_prod___ABraAssignExpr___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:5935 */
+          /* ./parser//parser_prod.nit:6084 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5935);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6084);
           }
-          /* ./parser//parser_prod.nit:5936 */
+          /* ./parser//parser_prod.nit:6085 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5936);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6085);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:5937 */
+          /* ./parser//parser_prod.nit:6086 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5937);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6086);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:5939 */
+          /* ./parser//parser_prod.nit:6088 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5939);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6088);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:5941 */
+        /* ./parser//parser_prod.nit:6090 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -31479,11 +32283,11 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:5944 */
+  /* ./parser//parser_prod.nit:6093 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5944);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6093);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31493,7 +32297,7 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5945 */
+    /* ./parser//parser_prod.nit:6094 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31508,32 +32312,32 @@ void parser_prod___ABraAssignExpr___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:5946 */
+      /* ./parser//parser_prod.nit:6095 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5946);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6095);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5947 */
+      /* ./parser//parser_prod.nit:6096 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5947);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6096);
       }
-      /* ./parser//parser_prod.nit:5948 */
+      /* ./parser//parser_prod.nit:6097 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5950 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5950);
+      /* ./parser//parser_prod.nit:6099 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6099);
     }
-    /* ./parser//parser_prod.nit:5952 */
+    /* ./parser//parser_prod.nit:6101 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:5954 */
+  /* ./parser//parser_prod.nit:6103 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5954);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6103);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31543,7 +32347,7 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:5955 */
+    /* ./parser//parser_prod.nit:6104 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31558,25 +32362,25 @@ void parser_prod___ABraAssignExpr___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:5956 */
+      /* ./parser//parser_prod.nit:6105 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5956);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6105);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:5957 */
+      /* ./parser//parser_prod.nit:6106 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5957);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6106);
       }
-      /* ./parser//parser_prod.nit:5958 */
+      /* ./parser//parser_prod.nit:6107 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5960 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5960);
+      /* ./parser//parser_prod.nit:6109 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6109);
     }
-    /* ./parser//parser_prod.nit:5962 */
+    /* ./parser//parser_prod.nit:6111 */
     goto label1;
   }
   label1: while(0);
@@ -31589,7 +32393,7 @@ void parser_prod___ABraAssignExpr___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_prod;
-  fra.me.line = 5966;
+  fra.me.line = 6115;
   fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31598,35 +32402,35 @@ void 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:5968 */
+  /* ./parser//parser_prod.nit:6117 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5968);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6117);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5969 */
+  /* ./parser//parser_prod.nit:6118 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5969);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6118);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraAssignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:5972 */
+  /* ./parser//parser_prod.nit:6121 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5972);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6121);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:5973 */
+  /* ./parser//parser_prod.nit:6122 */
   REGB0 = TAG_Bool(ATTR_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_prod, 5973);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6122);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -31648,37 +32452,37 @@ void parser_prod___ABraAssignExpr___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:5970 */
+    /* ./parser//parser_prod.nit:6119 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
+  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos201]) return;
+  if (init_table[itpos203]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5977;
+  fra.me.line = 6126;
   fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 1;
+  init_table[itpos203] = 1;
   return;
 }
 void parser_prod___ABraReassignExpr___init_abrareassignexpr(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_ABraReassignExpr].i;
+  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos202]) return;
+  if (init_table[itpos204]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5979;
+  fra.me.line = 6128;
   fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -31692,50 +32496,50 @@ void parser_prod___ABraReassignExpr___init_abrareassignexpr(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:5986 */
+  /* ./parser//parser_prod.nit:6135 */
   CALL_parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:5987 */
+  /* ./parser//parser_prod.nit:6136 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5987);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6136);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5988 */
+  /* ./parser//parser_prod.nit:6137 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5988);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6137);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraReassignExpr___init_abrareassignexpr_1));
-  /* ./parser//parser_prod.nit:5994 */
+  /* ./parser//parser_prod.nit:6143 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5994);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6143);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:5995 */
+  /* ./parser//parser_prod.nit:6144 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5995);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6144);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5996 */
+  /* ./parser//parser_prod.nit:6145 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5996);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6145);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:5997 */
+  /* ./parser//parser_prod.nit:6146 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5997);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6146);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos202] = 1;
+  init_table[itpos204] = 1;
   return;
 }
   void OC_parser_prod___ABraReassignExpr___init_abrareassignexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -31743,7 +32547,7 @@ void parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:5989 */
+    /* ./parser//parser_prod.nit:6138 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -31756,21 +32560,21 @@ void parser_prod___ABraReassignExpr___init_abrareassignexpr(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:5990 */
+    /* ./parser//parser_prod.nit:6139 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5990);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6139);
     }
-    /* ./parser//parser_prod.nit:5991 */
+    /* ./parser//parser_prod.nit:6140 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5991);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6140);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:5992 */
+    /* ./parser//parser_prod.nit:6141 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -31785,7 +32589,7 @@ void parser_prod___ABraReassignExpr___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_prod;
-  fra.me.line = 6000;
+  fra.me.line = 6149;
   fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31796,11 +32600,11 @@ void parser_prod___ABraReassignExpr___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:6002 */
+  /* ./parser//parser_prod.nit:6151 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6002);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6151);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31810,7 +32614,7 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6003 */
+    /* ./parser//parser_prod.nit:6152 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31825,33 +32629,33 @@ void parser_prod___ABraReassignExpr___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:6004 */
+      /* ./parser//parser_prod.nit:6153 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6004);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6153);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6005 */
+      /* ./parser//parser_prod.nit:6154 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6005);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6154);
       }
-      /* ./parser//parser_prod.nit:6006 */
+      /* ./parser//parser_prod.nit:6155 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6008 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6008);
+      /* ./parser//parser_prod.nit:6157 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6157);
     }
-    /* ./parser//parser_prod.nit:6010 */
+    /* ./parser//parser_prod.nit:6159 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6012 */
+  /* ./parser//parser_prod.nit:6161 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6012);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6161);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -31861,13 +32665,13 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6012 */
+      /* ./parser//parser_prod.nit:6161 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6013 */
+      /* ./parser//parser_prod.nit:6162 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6013);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6162);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -31884,7 +32688,7 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6014 */
+        /* ./parser//parser_prod.nit:6163 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -31899,37 +32703,37 @@ void parser_prod___ABraReassignExpr___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:6015 */
+          /* ./parser//parser_prod.nit:6164 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6015);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6164);
           }
-          /* ./parser//parser_prod.nit:6016 */
+          /* ./parser//parser_prod.nit:6165 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6016);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6165);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6017 */
+          /* ./parser//parser_prod.nit:6166 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6017);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6166);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6019 */
+          /* ./parser//parser_prod.nit:6168 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6019);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6168);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6021 */
+        /* ./parser//parser_prod.nit:6170 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -31944,11 +32748,11 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:6024 */
+  /* ./parser//parser_prod.nit:6173 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6024);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6173);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -31958,7 +32762,7 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6025 */
+    /* ./parser//parser_prod.nit:6174 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -31973,32 +32777,32 @@ void parser_prod___ABraReassignExpr___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:6026 */
+      /* ./parser//parser_prod.nit:6175 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6026);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6175);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6027 */
+      /* ./parser//parser_prod.nit:6176 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6027);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6176);
       }
-      /* ./parser//parser_prod.nit:6028 */
+      /* ./parser//parser_prod.nit:6177 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6030 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6030);
+      /* ./parser//parser_prod.nit:6179 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6179);
     }
-    /* ./parser//parser_prod.nit:6032 */
+    /* ./parser//parser_prod.nit:6181 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6034 */
+  /* ./parser//parser_prod.nit:6183 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6034);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6183);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32008,7 +32812,7 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6035 */
+    /* ./parser//parser_prod.nit:6184 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32023,25 +32827,25 @@ void parser_prod___ABraReassignExpr___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:6036 */
+      /* ./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_prod, 6036);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6185);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6037 */
+      /* ./parser//parser_prod.nit:6186 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6037);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6186);
       }
-      /* ./parser//parser_prod.nit:6038 */
+      /* ./parser//parser_prod.nit:6187 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6040 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6040);
+      /* ./parser//parser_prod.nit:6189 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6189);
     }
-    /* ./parser//parser_prod.nit:6042 */
+    /* ./parser//parser_prod.nit:6191 */
     goto label1;
   }
   label1: while(0);
@@ -32054,7 +32858,7 @@ void parser_prod___ABraReassignExpr___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_prod;
-  fra.me.line = 6046;
+  fra.me.line = 6195;
   fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32063,35 +32867,35 @@ void 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:6048 */
+  /* ./parser//parser_prod.nit:6197 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6048);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6197);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6049 */
+  /* ./parser//parser_prod.nit:6198 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6049);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6198);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___ABraReassignExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6052 */
+  /* ./parser//parser_prod.nit:6201 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6052);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6201);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6053 */
+  /* ./parser//parser_prod.nit:6202 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6053);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6202);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -32113,37 +32917,37 @@ void parser_prod___ABraReassignExpr___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:6050 */
+    /* ./parser//parser_prod.nit:6199 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_table){
-  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
+  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos203]) return;
+  if (init_table[itpos205]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6057;
+  fra.me.line = 6206;
   fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 1;
+  init_table[itpos205] = 1;
   return;
 }
 void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
+  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos204]) return;
+  if (init_table[itpos206]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6059;
+  fra.me.line = 6208;
   fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32155,25 +32959,25 @@ void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:6065 */
+  /* ./parser//parser_prod.nit:6214 */
   CALL_parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6066 */
+  /* ./parser//parser_prod.nit:6215 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6066);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6215);
   }
   ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6067 */
+  /* ./parser//parser_prod.nit:6216 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6067);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6216);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureCallExpr___init_aclosurecallexpr_1));
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureCallExpr___init_aclosurecallexpr_2));
   stack_frame_head = fra.me.prev;
-  init_table[itpos204] = 1;
+  init_table[itpos206] = 1;
   return;
 }
   void OC_parser_prod___AClosureCallExpr___init_aclosurecallexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -32181,7 +32985,7 @@ void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6068 */
+    /* ./parser//parser_prod.nit:6217 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -32194,21 +32998,21 @@ void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6069 */
+    /* ./parser//parser_prod.nit:6218 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6069);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6218);
     }
-    /* ./parser//parser_prod.nit:6070 */
+    /* ./parser//parser_prod.nit:6219 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6070);
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6219);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AClosureCallExpr____n_args(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6071 */
+    /* ./parser//parser_prod.nit:6220 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -32218,7 +33022,7 @@ void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6073 */
+    /* ./parser//parser_prod.nit:6222 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -32231,21 +33035,21 @@ void parser_prod___AClosureCallExpr___init_aclosurecallexpr(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6074 */
+    /* ./parser//parser_prod.nit:6223 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6074);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6223);
     }
-    /* ./parser//parser_prod.nit:6075 */
+    /* ./parser//parser_prod.nit:6224 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6075);
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6224);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6076 */
+    /* ./parser//parser_prod.nit:6225 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -32260,7 +33064,7 @@ void parser_prod___AClosureCallExpr___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_prod;
-  fra.me.line = 6080;
+  fra.me.line = 6229;
   fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32271,11 +33075,11 @@ void parser_prod___AClosureCallExpr___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:6082 */
+  /* ./parser//parser_prod.nit:6231 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6082);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6231);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32285,7 +33089,7 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6083 */
+    /* ./parser//parser_prod.nit:6232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32300,33 +33104,33 @@ void parser_prod___AClosureCallExpr___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:6084 */
+      /* ./parser//parser_prod.nit:6233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6084);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6233);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6085 */
+      /* ./parser//parser_prod.nit:6234 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6085);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6234);
       }
-      /* ./parser//parser_prod.nit:6086 */
+      /* ./parser//parser_prod.nit:6235 */
       ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6088 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6088);
+      /* ./parser//parser_prod.nit:6237 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6237);
     }
-    /* ./parser//parser_prod.nit:6090 */
+    /* ./parser//parser_prod.nit:6239 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6092 */
+  /* ./parser//parser_prod.nit:6241 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6092);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6241);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -32336,13 +33140,13 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6092 */
+      /* ./parser//parser_prod.nit:6241 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6093 */
+      /* ./parser//parser_prod.nit:6242 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6093);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6242);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -32359,7 +33163,7 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6094 */
+        /* ./parser//parser_prod.nit:6243 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -32374,37 +33178,37 @@ void parser_prod___AClosureCallExpr___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:6095 */
+          /* ./parser//parser_prod.nit:6244 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6095);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6244);
           }
-          /* ./parser//parser_prod.nit:6096 */
+          /* ./parser//parser_prod.nit:6245 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6096);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6245);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6097 */
+          /* ./parser//parser_prod.nit:6246 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6097);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6246);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6099 */
+          /* ./parser//parser_prod.nit:6248 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6099);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6248);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6101 */
+        /* ./parser//parser_prod.nit:6250 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -32419,12 +33223,12 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:6104 */
+  /* ./parser//parser_prod.nit:6253 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 6104);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6253);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -32434,13 +33238,13 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6104 */
+      /* ./parser//parser_prod.nit:6253 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6105 */
+      /* ./parser//parser_prod.nit:6254 */
       REGB3 = TAG_Bool(ATTR_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_prod, 6105);
+        nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6254);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -32457,7 +33261,7 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6106 */
+        /* ./parser//parser_prod.nit:6255 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -32472,37 +33276,37 @@ void parser_prod___AClosureCallExpr___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:6107 */
+          /* ./parser//parser_prod.nit:6256 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6107);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6256);
           }
-          /* ./parser//parser_prod.nit:6108 */
+          /* ./parser//parser_prod.nit:6257 */
           REGB3 = TAG_Bool(ATTR_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_prod, 6108);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6257);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6109 */
+          /* ./parser//parser_prod.nit:6258 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6109);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6258);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6111 */
+          /* ./parser//parser_prod.nit:6260 */
           REGB3 = TAG_Bool(ATTR_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_prod, 6111);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6260);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6113 */
+        /* ./parser//parser_prod.nit:6262 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -32527,7 +33331,7 @@ void parser_prod___AClosureCallExpr___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_prod;
-  fra.me.line = 6118;
+  fra.me.line = 6267;
   fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32536,27 +33340,27 @@ void 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:6120 */
+  /* ./parser//parser_prod.nit:6269 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6120);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6269);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6121 */
+  /* ./parser//parser_prod.nit:6270 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6121);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6270);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureCallExpr___visit_all_1));
-  /* ./parser//parser_prod.nit:6124 */
+  /* ./parser//parser_prod.nit:6273 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6124);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6273);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureCallExpr___visit_all_2));
@@ -32578,7 +33382,7 @@ void 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:6122 */
+    /* ./parser//parser_prod.nit:6271 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -32598,37 +33402,37 @@ void 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:6125 */
+    /* ./parser//parser_prod.nit:6274 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
-  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
+  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos205]) return;
+  if (init_table[itpos207]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6130;
+  fra.me.line = 6279;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
+  init_table[itpos207] = 1;
   return;
 }
 void parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* init_table){
-  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
+  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos206]) return;
+  if (init_table[itpos208]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6132;
+  fra.me.line = 6281;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32636,23 +33440,23 @@ void parser_prod___AVarExpr___init_avarexpr(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:6136 */
+  /* ./parser//parser_prod.nit:6285 */
   CALL_parser_prod___AVarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6137 */
+  /* ./parser//parser_prod.nit:6286 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6137);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6286);
   }
   ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6138 */
+  /* ./parser//parser_prod.nit:6287 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6138);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6287);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos206] = 1;
+  init_table[itpos208] = 1;
   return;
 }
 void parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -32662,7 +33466,7 @@ void parser_prod___AVarExpr___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_prod;
-  fra.me.line = 6141;
+  fra.me.line = 6290;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32673,11 +33477,11 @@ void parser_prod___AVarExpr___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:6143 */
+  /* ./parser//parser_prod.nit:6292 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6143);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6292);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32687,7 +33491,7 @@ void parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6144 */
+    /* ./parser//parser_prod.nit:6293 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32702,25 +33506,25 @@ void parser_prod___AVarExpr___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:6145 */
+      /* ./parser//parser_prod.nit:6294 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6145);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6294);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6146 */
+      /* ./parser//parser_prod.nit:6295 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6146);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6295);
       }
-      /* ./parser//parser_prod.nit:6147 */
+      /* ./parser//parser_prod.nit:6296 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6149 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6149);
+      /* ./parser//parser_prod.nit:6298 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6298);
     }
-    /* ./parser//parser_prod.nit:6151 */
+    /* ./parser//parser_prod.nit:6300 */
     goto label1;
   }
   label1: while(0);
@@ -32733,7 +33537,7 @@ void parser_prod___AVarExpr___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_prod;
-  fra.me.line = 6155;
+  fra.me.line = 6304;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -32741,11 +33545,11 @@ void 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:6157 */
+  /* ./parser//parser_prod.nit:6306 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6157);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6306);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -32753,31 +33557,31 @@ void parser_prod___AVarExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos207]) return;
+  if (init_table[itpos209]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6161;
+  fra.me.line = 6310;
   fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
+  init_table[itpos209] = 1;
   return;
 }
 void parser_prod___AVarAssignExpr___init_avarassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos208]) return;
+  if (init_table[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6163;
+  fra.me.line = 6312;
   fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32789,49 +33593,49 @@ void parser_prod___AVarAssignExpr___init_avarassignexpr(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:6169 */
+  /* ./parser//parser_prod.nit:6318 */
   CALL_parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6170 */
+  /* ./parser//parser_prod.nit:6319 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6170);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6319);
   }
   ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6171 */
+  /* ./parser//parser_prod.nit:6320 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6171);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6320);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6172 */
+  /* ./parser//parser_prod.nit:6321 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6172);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6321);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6173 */
+  /* ./parser//parser_prod.nit:6322 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6173);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6322);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6174 */
+  /* ./parser//parser_prod.nit:6323 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6174);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6323);
   }
   ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6175 */
+  /* ./parser//parser_prod.nit:6324 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6175);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6324);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos208] = 1;
+  init_table[itpos210] = 1;
   return;
 }
 void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -32841,7 +33645,7 @@ void parser_prod___AVarAssignExpr___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_prod;
-  fra.me.line = 6178;
+  fra.me.line = 6327;
   fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32852,11 +33656,11 @@ void parser_prod___AVarAssignExpr___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:6180 */
+  /* ./parser//parser_prod.nit:6329 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6180);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6329);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32866,7 +33670,7 @@ void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6181 */
+    /* ./parser//parser_prod.nit:6330 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32881,32 +33685,32 @@ void parser_prod___AVarAssignExpr___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:6182 */
+      /* ./parser//parser_prod.nit:6331 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6182);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6331);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6183 */
+      /* ./parser//parser_prod.nit:6332 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6183);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6332);
       }
-      /* ./parser//parser_prod.nit:6184 */
+      /* ./parser//parser_prod.nit:6333 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6186 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6186);
+      /* ./parser//parser_prod.nit:6335 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6335);
     }
-    /* ./parser//parser_prod.nit:6188 */
+    /* ./parser//parser_prod.nit:6337 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6190 */
+  /* ./parser//parser_prod.nit:6339 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6190);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6339);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32916,7 +33720,7 @@ void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6191 */
+    /* ./parser//parser_prod.nit:6340 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32931,32 +33735,32 @@ void parser_prod___AVarAssignExpr___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:6192 */
+      /* ./parser//parser_prod.nit:6341 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6192);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6341);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6193 */
+      /* ./parser//parser_prod.nit:6342 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6193);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6342);
       }
-      /* ./parser//parser_prod.nit:6194 */
+      /* ./parser//parser_prod.nit:6343 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6196 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6196);
+      /* ./parser//parser_prod.nit:6345 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6345);
     }
-    /* ./parser//parser_prod.nit:6198 */
+    /* ./parser//parser_prod.nit:6347 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6200 */
+  /* ./parser//parser_prod.nit:6349 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6200);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6349);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -32966,7 +33770,7 @@ void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6201 */
+    /* ./parser//parser_prod.nit:6350 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -32981,25 +33785,25 @@ void parser_prod___AVarAssignExpr___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:6202 */
+      /* ./parser//parser_prod.nit:6351 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6202);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6351);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6203 */
+      /* ./parser//parser_prod.nit:6352 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6203);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6352);
       }
-      /* ./parser//parser_prod.nit:6204 */
+      /* ./parser//parser_prod.nit:6353 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6206 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6206);
+      /* ./parser//parser_prod.nit:6355 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6355);
     }
-    /* ./parser//parser_prod.nit:6208 */
+    /* ./parser//parser_prod.nit:6357 */
     goto label1;
   }
   label1: while(0);
@@ -33012,7 +33816,7 @@ void parser_prod___AVarAssignExpr___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_prod;
-  fra.me.line = 6212;
+  fra.me.line = 6361;
   fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33021,27 +33825,27 @@ void 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:6214 */
+  /* ./parser//parser_prod.nit:6363 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6214);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6363);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6215 */
+  /* ./parser//parser_prod.nit:6364 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6215);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6364);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6216 */
+  /* ./parser//parser_prod.nit:6365 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6216);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6365);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33049,31 +33853,31 @@ void parser_prod___AVarAssignExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
+  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos209]) return;
+  if (init_table[itpos211]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6220;
+  fra.me.line = 6369;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
+  init_table[itpos211] = 1;
   return;
 }
 void parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
+  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos210]) return;
+  if (init_table[itpos212]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6222;
+  fra.me.line = 6371;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33085,49 +33889,49 @@ void parser_prod___AVarReassignExpr___init_avarreassignexpr(val_t p0, val_t p1,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:6228 */
+  /* ./parser//parser_prod.nit:6377 */
   CALL_parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6229 */
+  /* ./parser//parser_prod.nit:6378 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6229);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6378);
   }
   ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6230 */
+  /* ./parser//parser_prod.nit:6379 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6230);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6379);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6231 */
+  /* ./parser//parser_prod.nit:6380 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6231);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6380);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6232 */
+  /* ./parser//parser_prod.nit:6381 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6232);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6381);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6233 */
+  /* ./parser//parser_prod.nit:6382 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6233);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6382);
   }
   ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6234 */
+  /* ./parser//parser_prod.nit:6383 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6234);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6383);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos210] = 1;
+  init_table[itpos212] = 1;
   return;
 }
 void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -33137,7 +33941,7 @@ void parser_prod___AVarReassignExpr___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_prod;
-  fra.me.line = 6237;
+  fra.me.line = 6386;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33148,11 +33952,11 @@ void parser_prod___AVarReassignExpr___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:6239 */
+  /* ./parser//parser_prod.nit:6388 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6239);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6388);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33162,7 +33966,7 @@ void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6240 */
+    /* ./parser//parser_prod.nit:6389 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33177,32 +33981,32 @@ void parser_prod___AVarReassignExpr___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:6241 */
+      /* ./parser//parser_prod.nit:6390 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6241);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6390);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6242 */
+      /* ./parser//parser_prod.nit:6391 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6242);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6391);
       }
-      /* ./parser//parser_prod.nit:6243 */
+      /* ./parser//parser_prod.nit:6392 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6245 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6245);
+      /* ./parser//parser_prod.nit:6394 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6394);
     }
-    /* ./parser//parser_prod.nit:6247 */
+    /* ./parser//parser_prod.nit:6396 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6249 */
+  /* ./parser//parser_prod.nit:6398 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6249);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6398);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33212,7 +34016,7 @@ void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6250 */
+    /* ./parser//parser_prod.nit:6399 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33227,32 +34031,32 @@ void parser_prod___AVarReassignExpr___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:6251 */
+      /* ./parser//parser_prod.nit:6400 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6251);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6400);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6252 */
+      /* ./parser//parser_prod.nit:6401 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6252);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6401);
       }
-      /* ./parser//parser_prod.nit:6253 */
+      /* ./parser//parser_prod.nit:6402 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6255 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6255);
+      /* ./parser//parser_prod.nit:6404 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6404);
     }
-    /* ./parser//parser_prod.nit:6257 */
+    /* ./parser//parser_prod.nit:6406 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6259 */
+  /* ./parser//parser_prod.nit:6408 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6259);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6408);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33262,7 +34066,7 @@ void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6260 */
+    /* ./parser//parser_prod.nit:6409 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33277,25 +34081,25 @@ void parser_prod___AVarReassignExpr___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:6261 */
+      /* ./parser//parser_prod.nit:6410 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6261);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6410);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6262 */
+      /* ./parser//parser_prod.nit:6411 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6262);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6411);
       }
-      /* ./parser//parser_prod.nit:6263 */
+      /* ./parser//parser_prod.nit:6412 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6265 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6265);
+      /* ./parser//parser_prod.nit:6414 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6414);
     }
-    /* ./parser//parser_prod.nit:6267 */
+    /* ./parser//parser_prod.nit:6416 */
     goto label1;
   }
   label1: while(0);
@@ -33308,7 +34112,7 @@ void parser_prod___AVarReassignExpr___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_prod;
-  fra.me.line = 6271;
+  fra.me.line = 6420;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33317,27 +34121,27 @@ void 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:6273 */
+  /* ./parser//parser_prod.nit:6422 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6273);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6422);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6274 */
+  /* ./parser//parser_prod.nit:6423 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6274);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6423);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6275 */
+  /* ./parser//parser_prod.nit:6424 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6275);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6424);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33345,31 +34149,31 @@ void parser_prod___AVarReassignExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos211]) return;
+  if (init_table[itpos213]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6279;
+  fra.me.line = 6428;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
+  init_table[itpos213] = 1;
   return;
 }
 void parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos212]) return;
+  if (init_table[itpos214]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6281;
+  fra.me.line = 6430;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33379,36 +34183,36 @@ void parser_prod___ARangeExpr___init_arangeexpr(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:6286 */
+  /* ./parser//parser_prod.nit:6435 */
   CALL_parser_prod___ARangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6287 */
+  /* ./parser//parser_prod.nit:6436 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6287);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6436);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6288 */
+  /* ./parser//parser_prod.nit:6437 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6288);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6437);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6289 */
+  /* ./parser//parser_prod.nit:6438 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6289);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6438);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6290 */
+  /* ./parser//parser_prod.nit:6439 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6290);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6439);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos212] = 1;
+  init_table[itpos214] = 1;
   return;
 }
 void parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -33418,7 +34222,7 @@ void parser_prod___ARangeExpr___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_prod;
-  fra.me.line = 6293;
+  fra.me.line = 6442;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33429,11 +34233,11 @@ void parser_prod___ARangeExpr___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:6295 */
+  /* ./parser//parser_prod.nit:6444 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6295);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6444);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33443,7 +34247,7 @@ void parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6296 */
+    /* ./parser//parser_prod.nit:6445 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33458,32 +34262,32 @@ void parser_prod___ARangeExpr___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:6297 */
+      /* ./parser//parser_prod.nit:6446 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6297);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6446);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6298 */
+      /* ./parser//parser_prod.nit:6447 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6298);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6447);
       }
-      /* ./parser//parser_prod.nit:6299 */
+      /* ./parser//parser_prod.nit:6448 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6301 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6301);
+      /* ./parser//parser_prod.nit:6450 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6450);
     }
-    /* ./parser//parser_prod.nit:6303 */
+    /* ./parser//parser_prod.nit:6452 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6305 */
+  /* ./parser//parser_prod.nit:6454 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6305);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6454);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33493,7 +34297,7 @@ void parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6306 */
+    /* ./parser//parser_prod.nit:6455 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33508,25 +34312,25 @@ void parser_prod___ARangeExpr___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:6307 */
+      /* ./parser//parser_prod.nit:6456 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6307);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6456);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6308 */
+      /* ./parser//parser_prod.nit:6457 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6308);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6457);
       }
-      /* ./parser//parser_prod.nit:6309 */
+      /* ./parser//parser_prod.nit:6458 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6311 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6311);
+      /* ./parser//parser_prod.nit:6460 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6460);
     }
-    /* ./parser//parser_prod.nit:6313 */
+    /* ./parser//parser_prod.nit:6462 */
     goto label1;
   }
   label1: while(0);
@@ -33539,7 +34343,7 @@ void 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_prod;
-  fra.me.line = 6317;
+  fra.me.line = 6466;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33548,19 +34352,19 @@ void parser_prod___ARangeExpr___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:6319 */
+  /* ./parser//parser_prod.nit:6468 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6319);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6468);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6320 */
+  /* ./parser//parser_prod.nit:6469 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6320);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6469);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33568,31 +34372,31 @@ void parser_prod___ARangeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos213]) return;
+  if (init_table[itpos215]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6324;
+  fra.me.line = 6473;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
+  init_table[itpos215] = 1;
   return;
 }
 void parser_prod___ACrangeExpr___init_acrangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos214]) return;
+  if (init_table[itpos216]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6326;
+  fra.me.line = 6475;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33602,36 +34406,36 @@ void parser_prod___ACrangeExpr___init_acrangeexpr(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:6331 */
+  /* ./parser//parser_prod.nit:6480 */
   CALL_parser_prod___ACrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6332 */
+  /* ./parser//parser_prod.nit:6481 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6332);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6481);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6333 */
+  /* ./parser//parser_prod.nit:6482 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6333);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6482);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6334 */
+  /* ./parser//parser_prod.nit:6483 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6334);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6483);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6335 */
+  /* ./parser//parser_prod.nit:6484 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6335);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6484);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos214] = 1;
+  init_table[itpos216] = 1;
   return;
 }
 void parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -33641,7 +34445,7 @@ void parser_prod___ACrangeExpr___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_prod;
-  fra.me.line = 6338;
+  fra.me.line = 6487;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33652,11 +34456,11 @@ void parser_prod___ACrangeExpr___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:6340 */
+  /* ./parser//parser_prod.nit:6489 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6340);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6489);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33666,7 +34470,7 @@ void parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6341 */
+    /* ./parser//parser_prod.nit:6490 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33681,32 +34485,32 @@ void parser_prod___ACrangeExpr___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:6342 */
+      /* ./parser//parser_prod.nit:6491 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6342);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6491);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6343 */
+      /* ./parser//parser_prod.nit:6492 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6343);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6492);
       }
-      /* ./parser//parser_prod.nit:6344 */
+      /* ./parser//parser_prod.nit:6493 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6346 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6346);
+      /* ./parser//parser_prod.nit:6495 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6495);
     }
-    /* ./parser//parser_prod.nit:6348 */
+    /* ./parser//parser_prod.nit:6497 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6350 */
+  /* ./parser//parser_prod.nit:6499 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6350);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6499);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33716,7 +34520,7 @@ void parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6351 */
+    /* ./parser//parser_prod.nit:6500 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33731,25 +34535,25 @@ void parser_prod___ACrangeExpr___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:6352 */
+      /* ./parser//parser_prod.nit:6501 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6352);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6501);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6353 */
+      /* ./parser//parser_prod.nit:6502 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6353);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6502);
       }
-      /* ./parser//parser_prod.nit:6354 */
+      /* ./parser//parser_prod.nit:6503 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6356 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6356);
+      /* ./parser//parser_prod.nit:6505 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6505);
     }
-    /* ./parser//parser_prod.nit:6358 */
+    /* ./parser//parser_prod.nit:6507 */
     goto label1;
   }
   label1: while(0);
@@ -33762,7 +34566,7 @@ void 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_prod;
-  fra.me.line = 6362;
+  fra.me.line = 6511;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33771,19 +34575,19 @@ void parser_prod___ACrangeExpr___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:6364 */
+  /* ./parser//parser_prod.nit:6513 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6364);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6513);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6365 */
+  /* ./parser//parser_prod.nit:6514 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6365);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6514);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -33791,31 +34595,31 @@ void parser_prod___ACrangeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos215]) return;
+  if (init_table[itpos217]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6369;
+  fra.me.line = 6518;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
+  init_table[itpos217] = 1;
   return;
 }
 void parser_prod___AOrangeExpr___init_aorangeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
+  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos216]) return;
+  if (init_table[itpos218]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6371;
+  fra.me.line = 6520;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33825,36 +34629,36 @@ void parser_prod___AOrangeExpr___init_aorangeexpr(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:6376 */
+  /* ./parser//parser_prod.nit:6525 */
   CALL_parser_prod___AOrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6377 */
+  /* ./parser//parser_prod.nit:6526 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6377);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6526);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6378 */
+  /* ./parser//parser_prod.nit:6527 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6378);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6527);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6379 */
+  /* ./parser//parser_prod.nit:6528 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6379);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6528);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6380 */
+  /* ./parser//parser_prod.nit:6529 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6380);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6529);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos216] = 1;
+  init_table[itpos218] = 1;
   return;
 }
 void parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -33864,7 +34668,7 @@ void parser_prod___AOrangeExpr___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_prod;
-  fra.me.line = 6383;
+  fra.me.line = 6532;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -33875,11 +34679,11 @@ void parser_prod___AOrangeExpr___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:6385 */
+  /* ./parser//parser_prod.nit:6534 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6385);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6534);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33889,7 +34693,7 @@ void parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6386 */
+    /* ./parser//parser_prod.nit:6535 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33904,32 +34708,32 @@ void parser_prod___AOrangeExpr___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:6387 */
+      /* ./parser//parser_prod.nit:6536 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6387);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6536);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6388 */
+      /* ./parser//parser_prod.nit:6537 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6388);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6537);
       }
-      /* ./parser//parser_prod.nit:6389 */
+      /* ./parser//parser_prod.nit:6538 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6391 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6391);
+      /* ./parser//parser_prod.nit:6540 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6540);
     }
-    /* ./parser//parser_prod.nit:6393 */
+    /* ./parser//parser_prod.nit:6542 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6395 */
+  /* ./parser//parser_prod.nit:6544 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6395);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6544);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -33939,7 +34743,7 @@ void parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6396 */
+    /* ./parser//parser_prod.nit:6545 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -33954,25 +34758,25 @@ void parser_prod___AOrangeExpr___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:6397 */
+      /* ./parser//parser_prod.nit:6546 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6397);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6546);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6398 */
+      /* ./parser//parser_prod.nit:6547 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6398);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6547);
       }
-      /* ./parser//parser_prod.nit:6399 */
+      /* ./parser//parser_prod.nit:6548 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6401 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6401);
+      /* ./parser//parser_prod.nit:6550 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6550);
     }
-    /* ./parser//parser_prod.nit:6403 */
+    /* ./parser//parser_prod.nit:6552 */
     goto label1;
   }
   label1: while(0);
@@ -33985,7 +34789,7 @@ void 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_prod;
-  fra.me.line = 6407;
+  fra.me.line = 6556;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33994,19 +34798,19 @@ void parser_prod___AOrangeExpr___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:6409 */
+  /* ./parser//parser_prod.nit:6558 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6409);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6558);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6410 */
+  /* ./parser//parser_prod.nit:6559 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6410);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6559);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34014,30 +34818,30 @@ void parser_prod___AOrangeExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
-  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos217]) return;
+  if (init_table[itpos219]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6414;
+  fra.me.line = 6563;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
+  init_table[itpos219] = 1;
   return;
 }
 void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table){
-  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
+  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos218]) return;
+  if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6416;
+  fra.me.line = 6565;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34045,11 +34849,11 @@ void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6420 */
+  /* ./parser//parser_prod.nit:6569 */
   CALL_parser_prod___AArrayExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___AArrayExpr___init_aarrayexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos218] = 1;
+  init_table[itpos220] = 1;
   return;
 }
   void OC_parser_prod___AArrayExpr___init_aarrayexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -34057,7 +34861,7 @@ void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_ta
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6421 */
+    /* ./parser//parser_prod.nit:6570 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -34070,21 +34874,21 @@ void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_ta
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6422 */
+    /* ./parser//parser_prod.nit:6571 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6422);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6571);
     }
-    /* ./parser//parser_prod.nit:6423 */
+    /* ./parser//parser_prod.nit:6572 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6423);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6572);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AArrayExpr____n_exprs(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6424 */
+    /* ./parser//parser_prod.nit:6573 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -34099,7 +34903,7 @@ void parser_prod___AArrayExpr___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_prod;
-  fra.me.line = 6428;
+  fra.me.line = 6577;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34110,12 +34914,12 @@ void parser_prod___AArrayExpr___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:6430 */
+  /* ./parser//parser_prod.nit:6579 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6430);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6579);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -34125,13 +34929,13 @@ void parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6430 */
+      /* ./parser//parser_prod.nit:6579 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6431 */
+      /* ./parser//parser_prod.nit:6580 */
       REGB3 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB3)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6431);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6580);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -34148,7 +34952,7 @@ void parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6432 */
+        /* ./parser//parser_prod.nit:6581 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -34163,37 +34967,37 @@ void parser_prod___AArrayExpr___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:6433 */
+          /* ./parser//parser_prod.nit:6582 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6433);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6582);
           }
-          /* ./parser//parser_prod.nit:6434 */
+          /* ./parser//parser_prod.nit:6583 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6434);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6583);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6435 */
+          /* ./parser//parser_prod.nit:6584 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6435);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6584);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6437 */
+          /* ./parser//parser_prod.nit:6586 */
           REGB3 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6437);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6586);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6439 */
+        /* ./parser//parser_prod.nit:6588 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -34218,7 +35022,7 @@ void parser_prod___AArrayExpr___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_prod;
-  fra.me.line = 6444;
+  fra.me.line = 6593;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34226,11 +35030,11 @@ void parser_prod___AArrayExpr___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:6446 */
+  /* ./parser//parser_prod.nit:6595 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6446);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6595);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AArrayExpr___visit_all_1));
@@ -34252,37 +35056,37 @@ void parser_prod___AArrayExpr___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:6447 */
+    /* ./parser//parser_prod.nit:6596 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
+  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos219]) return;
+  if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6452;
+  fra.me.line = 6601;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
+  init_table[itpos221] = 1;
   return;
 }
 void parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
+  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos220]) return;
+  if (init_table[itpos222]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6454;
+  fra.me.line = 6603;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34290,23 +35094,23 @@ void parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6458 */
+  /* ./parser//parser_prod.nit:6607 */
   CALL_parser_prod___ASelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6459 */
+  /* ./parser//parser_prod.nit:6608 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6459);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6608);
   }
   ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6460 */
+  /* ./parser//parser_prod.nit:6609 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6460);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6609);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos220] = 1;
+  init_table[itpos222] = 1;
   return;
 }
 void parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34316,7 +35120,7 @@ void parser_prod___ASelfExpr___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_prod;
-  fra.me.line = 6463;
+  fra.me.line = 6612;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34327,7 +35131,7 @@ void parser_prod___ASelfExpr___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:6465 */
+  /* ./parser//parser_prod.nit:6614 */
   fra.me.REG[3] = ATTR_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)) {
@@ -34342,7 +35146,7 @@ void parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6466 */
+    /* ./parser//parser_prod.nit:6615 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34357,25 +35161,25 @@ void parser_prod___ASelfExpr___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:6467 */
+      /* ./parser//parser_prod.nit:6616 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6467);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6616);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6468 */
+      /* ./parser//parser_prod.nit:6617 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast TKwself*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6468);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6617);
       }
-      /* ./parser//parser_prod.nit:6469 */
+      /* ./parser//parser_prod.nit:6618 */
       ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6471 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6471);
+      /* ./parser//parser_prod.nit:6620 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6620);
     }
-    /* ./parser//parser_prod.nit:6473 */
+    /* ./parser//parser_prod.nit:6622 */
     goto label1;
   }
   label1: while(0);
@@ -34387,7 +35191,7 @@ void 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_prod;
-  fra.me.line = 6477;
+  fra.me.line = 6626;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34395,46 +35199,46 @@ void parser_prod___ASelfExpr___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:6479 */
+  /* ./parser//parser_prod.nit:6628 */
   fra.me.REG[0] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_table){
-  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos221]) return;
+  if (init_table[itpos223]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6483;
+  fra.me.line = 6632;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos221] = 1;
+  init_table[itpos223] = 1;
   return;
 }
 void parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0, int* init_table){
-  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos222]) return;
+  if (init_table[itpos224]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6485;
+  fra.me.line = 6634;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:6487 */
+  /* ./parser//parser_prod.nit:6636 */
   CALL_parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos222] = 1;
+  init_table[itpos224] = 1;
   return;
 }
 void parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34442,7 +35246,7 @@ void parser_prod___AImplicitSelfExpr___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_prod;
-  fra.me.line = 6490;
+  fra.me.line = 6639;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34460,7 +35264,7 @@ void parser_prod___AImplicitSelfExpr___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_prod;
-  fra.me.line = 6494;
+  fra.me.line = 6643;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34472,31 +35276,31 @@ void parser_prod___AImplicitSelfExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
-  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos223]) return;
+  if (init_table[itpos225]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6499;
+  fra.me.line = 6648;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
+  init_table[itpos225] = 1;
   return;
 }
 void parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table){
-  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos224]) return;
+  if (init_table[itpos226]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6501;
+  fra.me.line = 6650;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34504,23 +35308,23 @@ void parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6505 */
+  /* ./parser//parser_prod.nit:6654 */
   CALL_parser_prod___ATrueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6506 */
+  /* ./parser//parser_prod.nit:6655 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6506);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6655);
   }
   ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6507 */
+  /* ./parser//parser_prod.nit:6656 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6507);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6656);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos224] = 1;
+  init_table[itpos226] = 1;
   return;
 }
 void parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34530,7 +35334,7 @@ void parser_prod___ATrueExpr___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_prod;
-  fra.me.line = 6510;
+  fra.me.line = 6659;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34541,11 +35345,11 @@ void parser_prod___ATrueExpr___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:6512 */
+  /* ./parser//parser_prod.nit:6661 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6512);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser_prod, 6661);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34555,7 +35359,7 @@ void parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6513 */
+    /* ./parser//parser_prod.nit:6662 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34570,25 +35374,25 @@ void parser_prod___ATrueExpr___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:6514 */
+      /* ./parser//parser_prod.nit:6663 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6514);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6663);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6515 */
+      /* ./parser//parser_prod.nit:6664 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast TKwtrue*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6515);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6664);
       }
-      /* ./parser//parser_prod.nit:6516 */
+      /* ./parser//parser_prod.nit:6665 */
       ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6518 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6518);
+      /* ./parser//parser_prod.nit:6667 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6667);
     }
-    /* ./parser//parser_prod.nit:6520 */
+    /* ./parser//parser_prod.nit:6669 */
     goto label1;
   }
   label1: while(0);
@@ -34601,7 +35405,7 @@ void 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_prod;
-  fra.me.line = 6524;
+  fra.me.line = 6673;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34609,11 +35413,11 @@ void parser_prod___ATrueExpr___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:6526 */
+  /* ./parser//parser_prod.nit:6675 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6526);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser_prod, 6675);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34621,31 +35425,31 @@ void parser_prod___ATrueExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
-  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos225]) return;
+  if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6530;
+  fra.me.line = 6679;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
+  init_table[itpos227] = 1;
   return;
 }
 void parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos226]) return;
+  if (init_table[itpos228]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6532;
+  fra.me.line = 6681;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34653,23 +35457,23 @@ void parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6536 */
+  /* ./parser//parser_prod.nit:6685 */
   CALL_parser_prod___AFalseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6537 */
+  /* ./parser//parser_prod.nit:6686 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6537);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6686);
   }
   ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6538 */
+  /* ./parser//parser_prod.nit:6687 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6538);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6687);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos226] = 1;
+  init_table[itpos228] = 1;
   return;
 }
 void parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34679,7 +35483,7 @@ void parser_prod___AFalseExpr___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_prod;
-  fra.me.line = 6541;
+  fra.me.line = 6690;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34690,11 +35494,11 @@ void parser_prod___AFalseExpr___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:6543 */
+  /* ./parser//parser_prod.nit:6692 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6543);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser_prod, 6692);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34704,7 +35508,7 @@ void parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6544 */
+    /* ./parser//parser_prod.nit:6693 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34719,25 +35523,25 @@ void parser_prod___AFalseExpr___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:6545 */
+      /* ./parser//parser_prod.nit:6694 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6545);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6694);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6546 */
+      /* ./parser//parser_prod.nit:6695 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast TKwfalse*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6546);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6695);
       }
-      /* ./parser//parser_prod.nit:6547 */
+      /* ./parser//parser_prod.nit:6696 */
       ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6549 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6549);
+      /* ./parser//parser_prod.nit:6698 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6698);
     }
-    /* ./parser//parser_prod.nit:6551 */
+    /* ./parser//parser_prod.nit:6700 */
     goto label1;
   }
   label1: while(0);
@@ -34750,7 +35554,7 @@ void 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_prod;
-  fra.me.line = 6555;
+  fra.me.line = 6704;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34758,11 +35562,11 @@ void parser_prod___AFalseExpr___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:6557 */
+  /* ./parser//parser_prod.nit:6706 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6557);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser_prod, 6706);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34770,31 +35574,31 @@ void parser_prod___AFalseExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
-  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
+  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos227]) return;
+  if (init_table[itpos229]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6561;
+  fra.me.line = 6710;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
+  init_table[itpos229] = 1;
   return;
 }
 void parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
+  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos228]) return;
+  if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6563;
+  fra.me.line = 6712;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34802,23 +35606,23 @@ void parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6567 */
+  /* ./parser//parser_prod.nit:6716 */
   CALL_parser_prod___ANullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6568 */
+  /* ./parser//parser_prod.nit:6717 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6568);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6717);
   }
   ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6569 */
+  /* ./parser//parser_prod.nit:6718 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6569);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6718);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos228] = 1;
+  init_table[itpos230] = 1;
   return;
 }
 void parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34828,7 +35632,7 @@ void parser_prod___ANullExpr___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_prod;
-  fra.me.line = 6572;
+  fra.me.line = 6721;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34839,11 +35643,11 @@ void parser_prod___ANullExpr___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:6574 */
+  /* ./parser//parser_prod.nit:6723 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6574);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 6723);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -34853,7 +35657,7 @@ void parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6575 */
+    /* ./parser//parser_prod.nit:6724 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -34868,25 +35672,25 @@ void parser_prod___ANullExpr___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:6576 */
+      /* ./parser//parser_prod.nit:6725 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6576);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6725);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6577 */
+      /* ./parser//parser_prod.nit:6726 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6577);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6726);
       }
-      /* ./parser//parser_prod.nit:6578 */
+      /* ./parser//parser_prod.nit:6727 */
       ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6580 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6580);
+      /* ./parser//parser_prod.nit:6729 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6729);
     }
-    /* ./parser//parser_prod.nit:6582 */
+    /* ./parser//parser_prod.nit:6731 */
     goto label1;
   }
   label1: while(0);
@@ -34899,7 +35703,7 @@ void 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_prod;
-  fra.me.line = 6586;
+  fra.me.line = 6735;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34907,11 +35711,11 @@ void parser_prod___ANullExpr___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:6588 */
+  /* ./parser//parser_prod.nit:6737 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6588);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 6737);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -34919,31 +35723,31 @@ void parser_prod___ANullExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
-  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos229]) return;
+  if (init_table[itpos231]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6592;
+  fra.me.line = 6741;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
+  init_table[itpos231] = 1;
   return;
 }
 void parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos230]) return;
+  if (init_table[itpos232]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6594;
+  fra.me.line = 6743;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -34951,23 +35755,23 @@ void parser_prod___AIntExpr___init_aintexpr(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:6598 */
+  /* ./parser//parser_prod.nit:6747 */
   CALL_parser_prod___AIntExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6599 */
+  /* ./parser//parser_prod.nit:6748 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6599);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6748);
   }
   ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6600 */
+  /* ./parser//parser_prod.nit:6749 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6600);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6749);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos230] = 1;
+  init_table[itpos232] = 1;
   return;
 }
 void parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -34977,7 +35781,7 @@ void parser_prod___AIntExpr___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_prod;
-  fra.me.line = 6603;
+  fra.me.line = 6752;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -34988,11 +35792,11 @@ void parser_prod___AIntExpr___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:6605 */
+  /* ./parser//parser_prod.nit:6754 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6605);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser_prod, 6754);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35002,7 +35806,7 @@ void parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6606 */
+    /* ./parser//parser_prod.nit:6755 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35017,25 +35821,25 @@ void parser_prod___AIntExpr___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:6607 */
+      /* ./parser//parser_prod.nit:6756 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6607);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6756);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6608 */
+      /* ./parser//parser_prod.nit:6757 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast TNumber*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6608);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6757);
       }
-      /* ./parser//parser_prod.nit:6609 */
+      /* ./parser//parser_prod.nit:6758 */
       ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6611 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6611);
+      /* ./parser//parser_prod.nit:6760 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6760);
     }
-    /* ./parser//parser_prod.nit:6613 */
+    /* ./parser//parser_prod.nit:6762 */
     goto label1;
   }
   label1: while(0);
@@ -35048,7 +35852,7 @@ void 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_prod;
-  fra.me.line = 6617;
+  fra.me.line = 6766;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35056,11 +35860,11 @@ void parser_prod___AIntExpr___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:6619 */
+  /* ./parser//parser_prod.nit:6768 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6619);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser_prod, 6768);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35068,31 +35872,31 @@ void parser_prod___AIntExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
-  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos231]) return;
+  if (init_table[itpos233]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6623;
+  fra.me.line = 6772;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
+  init_table[itpos233] = 1;
   return;
 }
 void parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos232]) return;
+  if (init_table[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6625;
+  fra.me.line = 6774;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35100,23 +35904,23 @@ void parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_ta
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6629 */
+  /* ./parser//parser_prod.nit:6778 */
   CALL_parser_prod___AFloatExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6630 */
+  /* ./parser//parser_prod.nit:6779 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6630);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6779);
   }
   ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6631 */
+  /* ./parser//parser_prod.nit:6780 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6631);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6780);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
+  init_table[itpos234] = 1;
   return;
 }
 void parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35126,7 +35930,7 @@ void parser_prod___AFloatExpr___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_prod;
-  fra.me.line = 6634;
+  fra.me.line = 6783;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35137,11 +35941,11 @@ void parser_prod___AFloatExpr___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:6636 */
+  /* ./parser//parser_prod.nit:6785 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6636);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser_prod, 6785);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35151,7 +35955,7 @@ void parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6637 */
+    /* ./parser//parser_prod.nit:6786 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35166,25 +35970,25 @@ void parser_prod___AFloatExpr___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:6638 */
+      /* ./parser//parser_prod.nit:6787 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6638);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6787);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6639 */
+      /* ./parser//parser_prod.nit:6788 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast TFloat*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6639);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6788);
       }
-      /* ./parser//parser_prod.nit:6640 */
+      /* ./parser//parser_prod.nit:6789 */
       ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6642 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6642);
+      /* ./parser//parser_prod.nit:6791 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6791);
     }
-    /* ./parser//parser_prod.nit:6644 */
+    /* ./parser//parser_prod.nit:6793 */
     goto label1;
   }
   label1: while(0);
@@ -35197,7 +36001,7 @@ void 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_prod;
-  fra.me.line = 6648;
+  fra.me.line = 6797;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35205,11 +36009,11 @@ void parser_prod___AFloatExpr___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:6650 */
+  /* ./parser//parser_prod.nit:6799 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6650);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser_prod, 6799);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35217,31 +36021,31 @@ void parser_prod___AFloatExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
-  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos233]) return;
+  if (init_table[itpos235]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6654;
+  fra.me.line = 6803;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
+  init_table[itpos235] = 1;
   return;
 }
 void parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos234]) return;
+  if (init_table[itpos236]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6656;
+  fra.me.line = 6805;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35249,23 +36053,23 @@ void parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_tabl
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6660 */
+  /* ./parser//parser_prod.nit:6809 */
   CALL_parser_prod___ACharExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6661 */
+  /* ./parser//parser_prod.nit:6810 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6661);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6810);
   }
   ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6662 */
+  /* ./parser//parser_prod.nit:6811 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6662);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6811);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos234] = 1;
+  init_table[itpos236] = 1;
   return;
 }
 void parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35275,7 +36079,7 @@ void parser_prod___ACharExpr___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_prod;
-  fra.me.line = 6665;
+  fra.me.line = 6814;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35286,11 +36090,11 @@ void parser_prod___ACharExpr___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:6667 */
+  /* ./parser//parser_prod.nit:6816 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6667);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser_prod, 6816);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35300,7 +36104,7 @@ void parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6668 */
+    /* ./parser//parser_prod.nit:6817 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35315,25 +36119,25 @@ void parser_prod___ACharExpr___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:6669 */
+      /* ./parser//parser_prod.nit:6818 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6669);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6818);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6670 */
+      /* ./parser//parser_prod.nit:6819 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast TChar*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6670);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6819);
       }
-      /* ./parser//parser_prod.nit:6671 */
+      /* ./parser//parser_prod.nit:6820 */
       ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6673 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6673);
+      /* ./parser//parser_prod.nit:6822 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6822);
     }
-    /* ./parser//parser_prod.nit:6675 */
+    /* ./parser//parser_prod.nit:6824 */
     goto label1;
   }
   label1: while(0);
@@ -35346,7 +36150,7 @@ void 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_prod;
-  fra.me.line = 6679;
+  fra.me.line = 6828;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35354,11 +36158,11 @@ void parser_prod___ACharExpr___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:6681 */
+  /* ./parser//parser_prod.nit:6830 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6681);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser_prod, 6830);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35366,31 +36170,31 @@ void parser_prod___ACharExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos235]) return;
+  if (init_table[itpos237]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6685;
+  fra.me.line = 6834;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 1;
+  init_table[itpos237] = 1;
   return;
 }
 void parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos236]) return;
+  if (init_table[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6687;
+  fra.me.line = 6836;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35398,23 +36202,23 @@ void parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6691 */
+  /* ./parser//parser_prod.nit:6840 */
   CALL_parser_prod___AStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6692 */
+  /* ./parser//parser_prod.nit:6841 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6692);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6841);
   }
   ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6693 */
+  /* ./parser//parser_prod.nit:6842 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6693);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6842);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos236] = 1;
+  init_table[itpos238] = 1;
   return;
 }
 void parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35424,7 +36228,7 @@ void parser_prod___AStringExpr___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_prod;
-  fra.me.line = 6696;
+  fra.me.line = 6845;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35435,11 +36239,11 @@ void parser_prod___AStringExpr___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:6698 */
+  /* ./parser//parser_prod.nit:6847 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6698);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6847);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35449,7 +36253,7 @@ void parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6699 */
+    /* ./parser//parser_prod.nit:6848 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35464,25 +36268,25 @@ void parser_prod___AStringExpr___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:6700 */
+      /* ./parser//parser_prod.nit:6849 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6700);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6849);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6701 */
+      /* ./parser//parser_prod.nit:6850 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6701);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6850);
       }
-      /* ./parser//parser_prod.nit:6702 */
+      /* ./parser//parser_prod.nit:6851 */
       ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6704 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6704);
+      /* ./parser//parser_prod.nit:6853 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6853);
     }
-    /* ./parser//parser_prod.nit:6706 */
+    /* ./parser//parser_prod.nit:6855 */
     goto label1;
   }
   label1: while(0);
@@ -35495,7 +36299,7 @@ void 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_prod;
-  fra.me.line = 6710;
+  fra.me.line = 6859;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35503,11 +36307,11 @@ void parser_prod___AStringExpr___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:6712 */
+  /* ./parser//parser_prod.nit:6861 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6712);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6861);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35515,31 +36319,31 @@ void parser_prod___AStringExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos237]) return;
+  if (init_table[itpos239]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6716;
+  fra.me.line = 6865;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 1;
+  init_table[itpos239] = 1;
   return;
 }
 void parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos238]) return;
+  if (init_table[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6718;
+  fra.me.line = 6867;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35547,23 +36351,23 @@ void parser_prod___AStartStringExpr___init_astartstringexpr(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:6722 */
+  /* ./parser//parser_prod.nit:6871 */
   CALL_parser_prod___AStartStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6723 */
+  /* ./parser//parser_prod.nit:6872 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6723);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6872);
   }
   ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6724 */
+  /* ./parser//parser_prod.nit:6873 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6724);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6873);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos238] = 1;
+  init_table[itpos240] = 1;
   return;
 }
 void parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35573,7 +36377,7 @@ void parser_prod___AStartStringExpr___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_prod;
-  fra.me.line = 6727;
+  fra.me.line = 6876;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35584,11 +36388,11 @@ void parser_prod___AStartStringExpr___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:6729 */
+  /* ./parser//parser_prod.nit:6878 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6729);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6878);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35598,7 +36402,7 @@ void parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6730 */
+    /* ./parser//parser_prod.nit:6879 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35613,25 +36417,25 @@ void parser_prod___AStartStringExpr___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:6731 */
+      /* ./parser//parser_prod.nit:6880 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6731);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6880);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6732 */
+      /* ./parser//parser_prod.nit:6881 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStartString, ID_TStartString)) /*cast TStartString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6732);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6881);
       }
-      /* ./parser//parser_prod.nit:6733 */
+      /* ./parser//parser_prod.nit:6882 */
       ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6735 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6735);
+      /* ./parser//parser_prod.nit:6884 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6884);
     }
-    /* ./parser//parser_prod.nit:6737 */
+    /* ./parser//parser_prod.nit:6886 */
     goto label1;
   }
   label1: while(0);
@@ -35644,7 +36448,7 @@ void parser_prod___AStartStringExpr___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_prod;
-  fra.me.line = 6741;
+  fra.me.line = 6890;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35652,11 +36456,11 @@ void 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:6743 */
+  /* ./parser//parser_prod.nit:6892 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6743);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6892);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35664,31 +36468,31 @@ void parser_prod___AStartStringExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos239]) return;
+  if (init_table[itpos241]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6747;
+  fra.me.line = 6896;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 1;
+  init_table[itpos241] = 1;
   return;
 }
 void parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos240]) return;
+  if (init_table[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6749;
+  fra.me.line = 6898;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35696,23 +36500,23 @@ void parser_prod___AMidStringExpr___init_amidstringexpr(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:6753 */
+  /* ./parser//parser_prod.nit:6902 */
   CALL_parser_prod___AMidStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6754 */
+  /* ./parser//parser_prod.nit:6903 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6754);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6903);
   }
   ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6755 */
+  /* ./parser//parser_prod.nit:6904 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6755);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6904);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos240] = 1;
+  init_table[itpos242] = 1;
   return;
 }
 void parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35722,7 +36526,7 @@ void parser_prod___AMidStringExpr___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_prod;
-  fra.me.line = 6758;
+  fra.me.line = 6907;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35733,11 +36537,11 @@ void parser_prod___AMidStringExpr___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:6760 */
+  /* ./parser//parser_prod.nit:6909 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6760);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6909);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35747,7 +36551,7 @@ void parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6761 */
+    /* ./parser//parser_prod.nit:6910 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35762,25 +36566,25 @@ void parser_prod___AMidStringExpr___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:6762 */
+      /* ./parser//parser_prod.nit:6911 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6762);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6911);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6763 */
+      /* ./parser//parser_prod.nit:6912 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMidString, ID_TMidString)) /*cast TMidString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6763);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6912);
       }
-      /* ./parser//parser_prod.nit:6764 */
+      /* ./parser//parser_prod.nit:6913 */
       ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6766 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6766);
+      /* ./parser//parser_prod.nit:6915 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6915);
     }
-    /* ./parser//parser_prod.nit:6768 */
+    /* ./parser//parser_prod.nit:6917 */
     goto label1;
   }
   label1: while(0);
@@ -35793,7 +36597,7 @@ void parser_prod___AMidStringExpr___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_prod;
-  fra.me.line = 6772;
+  fra.me.line = 6921;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35801,11 +36605,11 @@ void 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:6774 */
+  /* ./parser//parser_prod.nit:6923 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6774);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6923);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35813,31 +36617,31 @@ void parser_prod___AMidStringExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos241]) return;
+  if (init_table[itpos243]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6778;
+  fra.me.line = 6927;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
+  init_table[itpos243] = 1;
   return;
 }
 void parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos242]) return;
+  if (init_table[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6780;
+  fra.me.line = 6929;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35845,23 +36649,23 @@ void parser_prod___AEndStringExpr___init_aendstringexpr(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:6784 */
+  /* ./parser//parser_prod.nit:6933 */
   CALL_parser_prod___AEndStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6785 */
+  /* ./parser//parser_prod.nit:6934 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6785);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6934);
   }
   ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6786 */
+  /* ./parser//parser_prod.nit:6935 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6786);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6935);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos242] = 1;
+  init_table[itpos244] = 1;
   return;
 }
 void parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -35871,7 +36675,7 @@ void parser_prod___AEndStringExpr___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_prod;
-  fra.me.line = 6789;
+  fra.me.line = 6938;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -35882,11 +36686,11 @@ void parser_prod___AEndStringExpr___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:6791 */
+  /* ./parser//parser_prod.nit:6940 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6791);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6940);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -35896,7 +36700,7 @@ void parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6792 */
+    /* ./parser//parser_prod.nit:6941 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -35911,25 +36715,25 @@ void parser_prod___AEndStringExpr___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:6793 */
+      /* ./parser//parser_prod.nit:6942 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6793);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6942);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6794 */
+      /* ./parser//parser_prod.nit:6943 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEndString, ID_TEndString)) /*cast TEndString*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6794);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6943);
       }
-      /* ./parser//parser_prod.nit:6795 */
+      /* ./parser//parser_prod.nit:6944 */
       ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6797 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6797);
+      /* ./parser//parser_prod.nit:6946 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6946);
     }
-    /* ./parser//parser_prod.nit:6799 */
+    /* ./parser//parser_prod.nit:6948 */
     goto label1;
   }
   label1: while(0);
@@ -35942,7 +36746,7 @@ void parser_prod___AEndStringExpr___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_prod;
-  fra.me.line = 6803;
+  fra.me.line = 6952;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35950,11 +36754,11 @@ void 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:6805 */
+  /* ./parser//parser_prod.nit:6954 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6805);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6954);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -35962,30 +36766,30 @@ void parser_prod___AEndStringExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table){
-  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
+  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos243]) return;
+  if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6809;
+  fra.me.line = 6958;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
+  init_table[itpos245] = 1;
   return;
 }
 void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
+  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos244]) return;
+  if (init_table[itpos246]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6811;
+  fra.me.line = 6960;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -35993,11 +36797,11 @@ void parser_prod___ASuperstringExpr___init_asuperstringexpr(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:6815 */
+  /* ./parser//parser_prod.nit:6964 */
   CALL_parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperstringExpr___init_asuperstringexpr_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos244] = 1;
+  init_table[itpos246] = 1;
   return;
 }
   void OC_parser_prod___ASuperstringExpr___init_asuperstringexpr_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -36005,7 +36809,7 @@ void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:6816 */
+    /* ./parser//parser_prod.nit:6965 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -36018,21 +36822,21 @@ void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1,
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:6817 */
+    /* ./parser//parser_prod.nit:6966 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6817);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6966);
     }
-    /* ./parser//parser_prod.nit:6818 */
+    /* ./parser//parser_prod.nit:6967 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6818);
+      nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6967);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:6819 */
+    /* ./parser//parser_prod.nit:6968 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -36047,7 +36851,7 @@ void parser_prod___ASuperstringExpr___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_prod;
-  fra.me.line = 6823;
+  fra.me.line = 6972;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36058,12 +36862,12 @@ void parser_prod___ASuperstringExpr___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:6825 */
+  /* ./parser//parser_prod.nit:6974 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 6825);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6974);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -36073,13 +36877,13 @@ void parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:6825 */
+      /* ./parser//parser_prod.nit:6974 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:6826 */
+      /* ./parser//parser_prod.nit:6975 */
       REGB3 = TAG_Bool(ATTR_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_prod, 6826);
+        nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6975);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -36096,7 +36900,7 @@ void parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:6827 */
+        /* ./parser//parser_prod.nit:6976 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -36111,37 +36915,37 @@ void parser_prod___ASuperstringExpr___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:6828 */
+          /* ./parser//parser_prod.nit:6977 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6828);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6977);
           }
-          /* ./parser//parser_prod.nit:6829 */
+          /* ./parser//parser_prod.nit:6978 */
           REGB3 = TAG_Bool(ATTR_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_prod, 6829);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6978);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:6830 */
+          /* ./parser//parser_prod.nit:6979 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6830);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6979);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:6832 */
+          /* ./parser//parser_prod.nit:6981 */
           REGB3 = TAG_Bool(ATTR_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_prod, 6832);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6981);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:6834 */
+        /* ./parser//parser_prod.nit:6983 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -36166,7 +36970,7 @@ void 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_prod;
-  fra.me.line = 6839;
+  fra.me.line = 6988;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36174,11 +36978,11 @@ void parser_prod___ASuperstringExpr___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:6841 */
+  /* ./parser//parser_prod.nit:6990 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6841);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6990);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperstringExpr___visit_all_1));
@@ -36200,37 +37004,37 @@ void 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:6842 */
+    /* ./parser//parser_prod.nit:6991 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
-  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
+  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos245]) return;
+  if (init_table[itpos247]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6847;
+  fra.me.line = 6996;
   fra.me.meth = LOCATE_parser_prod___AParExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos245] = 1;
+  init_table[itpos247] = 1;
   return;
 }
 void parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, int* init_table){
-  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
+  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos246]) return;
+  if (init_table[itpos248]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6849;
+  fra.me.line = 6998;
   fra.me.meth = LOCATE_parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36238,23 +37042,23 @@ void parser_prod___AParExpr___init_aparexpr(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:6853 */
+  /* ./parser//parser_prod.nit:7002 */
   CALL_parser_prod___AParExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6854 */
+  /* ./parser//parser_prod.nit:7003 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6854);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7003);
   }
   ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6855 */
+  /* ./parser//parser_prod.nit:7004 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6855);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7004);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
+  init_table[itpos248] = 1;
   return;
 }
 void parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -36264,7 +37068,7 @@ void parser_prod___AParExpr___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_prod;
-  fra.me.line = 6858;
+  fra.me.line = 7007;
   fra.me.meth = LOCATE_parser_prod___AParExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36275,11 +37079,11 @@ void parser_prod___AParExpr___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:6860 */
+  /* ./parser//parser_prod.nit:7009 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6860);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7009);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36289,7 +37093,7 @@ void parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6861 */
+    /* ./parser//parser_prod.nit:7010 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36304,25 +37108,25 @@ void parser_prod___AParExpr___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:6862 */
+      /* ./parser//parser_prod.nit:7011 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6862);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7011);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6863 */
+      /* ./parser//parser_prod.nit:7012 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6863);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7012);
       }
-      /* ./parser//parser_prod.nit:6864 */
+      /* ./parser//parser_prod.nit:7013 */
       ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6866 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6866);
+      /* ./parser//parser_prod.nit:7015 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7015);
     }
-    /* ./parser//parser_prod.nit:6868 */
+    /* ./parser//parser_prod.nit:7017 */
     goto label1;
   }
   label1: while(0);
@@ -36335,7 +37139,7 @@ void 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_prod;
-  fra.me.line = 6872;
+  fra.me.line = 7021;
   fra.me.meth = LOCATE_parser_prod___AParExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -36343,11 +37147,11 @@ void parser_prod___AParExpr___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:6874 */
+  /* ./parser//parser_prod.nit:7023 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6874);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7023);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -36355,31 +37159,31 @@ void parser_prod___AParExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
-  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
+  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos247]) return;
+  if (init_table[itpos249]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6878;
+  fra.me.line = 7027;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
+  init_table[itpos249] = 1;
   return;
 }
 void parser_prod___AAsCastExpr___init_aascastexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
+  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos248]) return;
+  if (init_table[itpos250]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6880;
+  fra.me.line = 7029;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36391,49 +37195,49 @@ void parser_prod___AAsCastExpr___init_aascastexpr(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:6886 */
+  /* ./parser//parser_prod.nit:7035 */
   CALL_parser_prod___AAsCastExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6887 */
+  /* ./parser//parser_prod.nit:7036 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6887);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7036);
   }
   ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6888 */
+  /* ./parser//parser_prod.nit:7037 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6888);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7037);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6889 */
+  /* ./parser//parser_prod.nit:7038 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6889);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7038);
   }
   ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6890 */
+  /* ./parser//parser_prod.nit:7039 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6890);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7039);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6891 */
+  /* ./parser//parser_prod.nit:7040 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6891);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7040);
   }
   ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6892 */
+  /* ./parser//parser_prod.nit:7041 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6892);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7041);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
+  init_table[itpos250] = 1;
   return;
 }
 void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -36443,7 +37247,7 @@ void parser_prod___AAsCastExpr___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_prod;
-  fra.me.line = 6895;
+  fra.me.line = 7044;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36454,11 +37258,11 @@ void parser_prod___AAsCastExpr___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:6897 */
+  /* ./parser//parser_prod.nit:7046 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6897);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7046);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36468,7 +37272,7 @@ void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6898 */
+    /* ./parser//parser_prod.nit:7047 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36483,32 +37287,32 @@ void parser_prod___AAsCastExpr___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:6899 */
+      /* ./parser//parser_prod.nit:7048 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6899);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7048);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6900 */
+      /* ./parser//parser_prod.nit:7049 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6900);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7049);
       }
-      /* ./parser//parser_prod.nit:6901 */
+      /* ./parser//parser_prod.nit:7050 */
       ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6903 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6903);
+      /* ./parser//parser_prod.nit:7052 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7052);
     }
-    /* ./parser//parser_prod.nit:6905 */
+    /* ./parser//parser_prod.nit:7054 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6907 */
+  /* ./parser//parser_prod.nit:7056 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6907);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7056);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36518,7 +37322,7 @@ void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6908 */
+    /* ./parser//parser_prod.nit:7057 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36533,32 +37337,32 @@ void parser_prod___AAsCastExpr___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:6909 */
+      /* ./parser//parser_prod.nit:7058 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6909);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7058);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6910 */
+      /* ./parser//parser_prod.nit:7059 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6910);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7059);
       }
-      /* ./parser//parser_prod.nit:6911 */
+      /* ./parser//parser_prod.nit:7060 */
       ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6913 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6913);
+      /* ./parser//parser_prod.nit:7062 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7062);
     }
-    /* ./parser//parser_prod.nit:6915 */
+    /* ./parser//parser_prod.nit:7064 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6917 */
+  /* ./parser//parser_prod.nit:7066 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6917);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7066);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36568,7 +37372,7 @@ void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6918 */
+    /* ./parser//parser_prod.nit:7067 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36583,25 +37387,25 @@ void parser_prod___AAsCastExpr___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:6919 */
+      /* ./parser//parser_prod.nit:7068 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6919);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7068);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6920 */
+      /* ./parser//parser_prod.nit:7069 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6920);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7069);
       }
-      /* ./parser//parser_prod.nit:6921 */
+      /* ./parser//parser_prod.nit:7070 */
       ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6923 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6923);
+      /* ./parser//parser_prod.nit:7072 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7072);
     }
-    /* ./parser//parser_prod.nit:6925 */
+    /* ./parser//parser_prod.nit:7074 */
     goto label1;
   }
   label1: while(0);
@@ -36614,7 +37418,7 @@ void parser_prod___AAsCastExpr___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_prod;
-  fra.me.line = 6929;
+  fra.me.line = 7078;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36623,27 +37427,27 @@ void 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:6931 */
+  /* ./parser//parser_prod.nit:7080 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6931);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7080);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6932 */
+  /* ./parser//parser_prod.nit:7081 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6932);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7081);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6933 */
+  /* ./parser//parser_prod.nit:7082 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6933);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7082);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -36651,31 +37455,31 @@ void parser_prod___AAsCastExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos249]) return;
+  if (init_table[itpos251]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6937;
+  fra.me.line = 7086;
   fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
+  init_table[itpos251] = 1;
   return;
 }
 void parser_prod___AAsNotnullExpr___init_aasnotnullexpr(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
+  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos250]) return;
+  if (init_table[itpos252]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6939;
+  fra.me.line = 7088;
   fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -36689,62 +37493,62 @@ void parser_prod___AAsNotnullExpr___init_aasnotnullexpr(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:6946 */
+  /* ./parser//parser_prod.nit:7095 */
   CALL_parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:6947 */
+  /* ./parser//parser_prod.nit:7096 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6947);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7096);
   }
   ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6948 */
+  /* ./parser//parser_prod.nit:7097 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6948);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7097);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6949 */
+  /* ./parser//parser_prod.nit:7098 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6949);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7098);
   }
   ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:6950 */
+  /* ./parser//parser_prod.nit:7099 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6950);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7099);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6951 */
+  /* ./parser//parser_prod.nit:7100 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6951);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7100);
   }
   ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:6952 */
+  /* ./parser//parser_prod.nit:7101 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6952);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7101);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6953 */
+  /* ./parser//parser_prod.nit:7102 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6953);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7102);
   }
   ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:6954 */
+  /* ./parser//parser_prod.nit:7103 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6954);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7103);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos250] = 1;
+  init_table[itpos252] = 1;
   return;
 }
 void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -36754,7 +37558,7 @@ void parser_prod___AAsNotnullExpr___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_prod;
-  fra.me.line = 6957;
+  fra.me.line = 7106;
   fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -36765,11 +37569,11 @@ void parser_prod___AAsNotnullExpr___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:6959 */
+  /* ./parser//parser_prod.nit:7108 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6959);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7108);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36779,7 +37583,7 @@ void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6960 */
+    /* ./parser//parser_prod.nit:7109 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36794,32 +37598,32 @@ void parser_prod___AAsNotnullExpr___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:6961 */
+      /* ./parser//parser_prod.nit:7110 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6961);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7110);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6962 */
+      /* ./parser//parser_prod.nit:7111 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6962);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7111);
       }
-      /* ./parser//parser_prod.nit:6963 */
+      /* ./parser//parser_prod.nit:7112 */
       ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6965 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6965);
+      /* ./parser//parser_prod.nit:7114 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7114);
     }
-    /* ./parser//parser_prod.nit:6967 */
+    /* ./parser//parser_prod.nit:7116 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6969 */
+  /* ./parser//parser_prod.nit:7118 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6969);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7118);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36829,7 +37633,7 @@ void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6970 */
+    /* ./parser//parser_prod.nit:7119 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36844,32 +37648,32 @@ void parser_prod___AAsNotnullExpr___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:6971 */
+      /* ./parser//parser_prod.nit:7120 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6971);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7120);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6972 */
+      /* ./parser//parser_prod.nit:7121 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6972);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7121);
       }
-      /* ./parser//parser_prod.nit:6973 */
+      /* ./parser//parser_prod.nit:7122 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6975 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6975);
+      /* ./parser//parser_prod.nit:7124 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7124);
     }
-    /* ./parser//parser_prod.nit:6977 */
+    /* ./parser//parser_prod.nit:7126 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6979 */
+  /* ./parser//parser_prod.nit:7128 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6979);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 7128);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36879,7 +37683,7 @@ void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6980 */
+    /* ./parser//parser_prod.nit:7129 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36894,32 +37698,32 @@ void parser_prod___AAsNotnullExpr___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:6981 */
+      /* ./parser//parser_prod.nit:7130 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6981);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7130);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6982 */
+      /* ./parser//parser_prod.nit:7131 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6982);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7131);
       }
-      /* ./parser//parser_prod.nit:6983 */
+      /* ./parser//parser_prod.nit:7132 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6985 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6985);
+      /* ./parser//parser_prod.nit:7134 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7134);
     }
-    /* ./parser//parser_prod.nit:6987 */
+    /* ./parser//parser_prod.nit:7136 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:6989 */
+  /* ./parser//parser_prod.nit:7138 */
   REGB0 = TAG_Bool(ATTR_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_prod, 6989);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 7138);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -36929,7 +37733,7 @@ void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:6990 */
+    /* ./parser//parser_prod.nit:7139 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -36944,25 +37748,25 @@ void parser_prod___AAsNotnullExpr___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:6991 */
+      /* ./parser//parser_prod.nit:7140 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6991);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7140);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6992 */
+      /* ./parser//parser_prod.nit:7141 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6992);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7141);
       }
-      /* ./parser//parser_prod.nit:6993 */
+      /* ./parser//parser_prod.nit:7142 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6995 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6995);
+      /* ./parser//parser_prod.nit:7144 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7144);
     }
-    /* ./parser//parser_prod.nit:6997 */
+    /* ./parser//parser_prod.nit:7146 */
     goto label1;
   }
   label1: while(0);
@@ -36975,7 +37779,7 @@ void parser_prod___AAsNotnullExpr___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_prod;
-  fra.me.line = 7001;
+  fra.me.line = 7150;
   fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -36984,35 +37788,35 @@ void 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:7003 */
+  /* ./parser//parser_prod.nit:7152 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7003);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7152);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7004 */
+  /* ./parser//parser_prod.nit:7153 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7004);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7153);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7005 */
+  /* ./parser//parser_prod.nit:7154 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7005);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 7154);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7006 */
+  /* ./parser//parser_prod.nit:7155 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7006);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 7155);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -37020,31 +37824,31 @@ void parser_prod___AAsNotnullExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
+  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos251]) return;
+  if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7010;
+  fra.me.line = 7159;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
+  init_table[itpos253] = 1;
   return;
 }
 void parser_prod___AIssetAttrExpr___init_aissetattrexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
+  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos252]) return;
+  if (init_table[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7012;
+  fra.me.line = 7161;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___init_aissetattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37056,49 +37860,49 @@ void parser_prod___AIssetAttrExpr___init_aissetattrexpr(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:7018 */
+  /* ./parser//parser_prod.nit:7167 */
   CALL_parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7019 */
+  /* ./parser//parser_prod.nit:7168 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7019);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7168);
   }
   ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7020 */
+  /* ./parser//parser_prod.nit:7169 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7020);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7169);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7021 */
+  /* ./parser//parser_prod.nit:7170 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7021);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7170);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7022 */
+  /* ./parser//parser_prod.nit:7171 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7022);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7171);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7023 */
+  /* ./parser//parser_prod.nit:7172 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7023);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7172);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7024 */
+  /* ./parser//parser_prod.nit:7173 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7024);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7173);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos252] = 1;
+  init_table[itpos254] = 1;
   return;
 }
 void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -37108,7 +37912,7 @@ void parser_prod___AIssetAttrExpr___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_prod;
-  fra.me.line = 7027;
+  fra.me.line = 7176;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37119,11 +37923,11 @@ void parser_prod___AIssetAttrExpr___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:7029 */
+  /* ./parser//parser_prod.nit:7178 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7029);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser_prod, 7178);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37133,7 +37937,7 @@ void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7030 */
+    /* ./parser//parser_prod.nit:7179 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37148,32 +37952,32 @@ void parser_prod___AIssetAttrExpr___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:7031 */
+      /* ./parser//parser_prod.nit:7180 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7031);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7180);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7032 */
+      /* ./parser//parser_prod.nit:7181 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwisset, ID_TKwisset)) /*cast TKwisset*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7032);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7181);
       }
-      /* ./parser//parser_prod.nit:7033 */
+      /* ./parser//parser_prod.nit:7182 */
       ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7035 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7035);
+      /* ./parser//parser_prod.nit:7184 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7184);
     }
-    /* ./parser//parser_prod.nit:7037 */
+    /* ./parser//parser_prod.nit:7186 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7039 */
+  /* ./parser//parser_prod.nit:7188 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7039);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7188);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37183,7 +37987,7 @@ void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7040 */
+    /* ./parser//parser_prod.nit:7189 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37198,32 +38002,32 @@ void parser_prod___AIssetAttrExpr___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:7041 */
+      /* ./parser//parser_prod.nit:7190 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7041);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7190);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7042 */
+      /* ./parser//parser_prod.nit:7191 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7042);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7191);
       }
-      /* ./parser//parser_prod.nit:7043 */
+      /* ./parser//parser_prod.nit:7192 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7045 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7045);
+      /* ./parser//parser_prod.nit:7194 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7194);
     }
-    /* ./parser//parser_prod.nit:7047 */
+    /* ./parser//parser_prod.nit:7196 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7049 */
+  /* ./parser//parser_prod.nit:7198 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7049);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7198);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37233,7 +38037,7 @@ void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7050 */
+    /* ./parser//parser_prod.nit:7199 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37248,25 +38052,25 @@ void parser_prod___AIssetAttrExpr___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:7051 */
+      /* ./parser//parser_prod.nit:7200 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7051);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7200);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7052 */
+      /* ./parser//parser_prod.nit:7201 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7052);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7201);
       }
-      /* ./parser//parser_prod.nit:7053 */
+      /* ./parser//parser_prod.nit:7202 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7055 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7055);
+      /* ./parser//parser_prod.nit:7204 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7204);
     }
-    /* ./parser//parser_prod.nit:7057 */
+    /* ./parser//parser_prod.nit:7206 */
     goto label1;
   }
   label1: while(0);
@@ -37279,7 +38083,7 @@ void parser_prod___AIssetAttrExpr___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_prod;
-  fra.me.line = 7061;
+  fra.me.line = 7210;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -37288,27 +38092,27 @@ void 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:7063 */
+  /* ./parser//parser_prod.nit:7212 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7063);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser_prod, 7212);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7064 */
+  /* ./parser//parser_prod.nit:7213 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7064);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7213);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7065 */
+  /* ./parser//parser_prod.nit:7214 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7065);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7214);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -37316,31 +38120,31 @@ void parser_prod___AIssetAttrExpr___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos253]) return;
+  if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7069;
+  fra.me.line = 7218;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
+  init_table[itpos255] = 1;
   return;
 }
 void parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos254]) return;
+  if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7071;
+  fra.me.line = 7220;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37348,23 +38152,23 @@ void parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p1, int* i
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7075 */
+  /* ./parser//parser_prod.nit:7224 */
   CALL_parser_prod___APlusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7076 */
+  /* ./parser//parser_prod.nit:7225 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7076);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7225);
   }
   ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7077 */
+  /* ./parser//parser_prod.nit:7226 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7077);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7226);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
+  init_table[itpos256] = 1;
   return;
 }
 void parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
@@ -37374,7 +38178,7 @@ void parser_prod___APlusAssignOp___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_prod;
-  fra.me.line = 7080;
+  fra.me.line = 7229;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37385,11 +38189,11 @@ void parser_prod___APlusAssignOp___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:7082 */
+  /* ./parser//parser_prod.nit:7231 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7082);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser_prod, 7231);
   }
   fra.me.REG[3] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37399,7 +38203,7 @@ void parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7083 */
+    /* ./parser//parser_prod.nit:7232 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37414,25 +38218,25 @@ void parser_prod___APlusAssignOp___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:7084 */
+      /* ./parser//parser_prod.nit:7233 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7084);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7233);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7085 */
+      /* ./parser//parser_prod.nit:7234 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPluseq, ID_TPluseq)) /*cast TPluseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7085);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7234);
       }
-      /* ./parser//parser_prod.nit:7086 */
+      /* ./parser//parser_prod.nit:7235 */
       ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7088 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7088);
+      /* ./parser//parser_prod.nit:7237 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7237);
     }
-    /* ./parser//parser_prod.nit:7090 */
+    /* ./parser//parser_prod.nit:7239 */
     goto label1;
   }
   label1: while(0);
@@ -37445,7 +38249,7 @@ void parser_prod___APlusAssignOp___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_prod;
-  fra.me.line = 7094;
+  fra.me.line = 7243;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37453,11 +38257,11 @@ void 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:7096 */
+  /* ./parser//parser_prod.nit:7245 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7096);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser_prod, 7245);
   }
   fra.me.REG[0] = ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -37465,31 +38269,31 @@ void parser_prod___APlusAssignOp___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
+  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos255]) return;
+  if (init_table[itpos257]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7100;
+  fra.me.line = 7249;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
+  init_table[itpos257] = 1;
   return;
 }
 void parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
+  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos256]) return;
+  if (init_table[itpos258]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7102;
+  fra.me.line = 7251;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37497,23 +38301,23 @@ void parser_prod___AMinusAssignOp___init_aminusassignop(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:7106 */
+  /* ./parser//parser_prod.nit:7255 */
   CALL_parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7107 */
+  /* ./parser//parser_prod.nit:7256 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7107);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7256);
   }
   ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7108 */
+  /* ./parser//parser_prod.nit:7257 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7108);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7257);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos256] = 1;
+  init_table[itpos258] = 1;
   return;
 }
 void parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
@@ -37523,7 +38327,7 @@ void parser_prod___AMinusAssignOp___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_prod;
-  fra.me.line = 7111;
+  fra.me.line = 7260;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37534,11 +38338,11 @@ void parser_prod___AMinusAssignOp___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:7113 */
+  /* ./parser//parser_prod.nit:7262 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7113);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser_prod, 7262);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37548,7 +38352,7 @@ void parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7114 */
+    /* ./parser//parser_prod.nit:7263 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37563,25 +38367,25 @@ void parser_prod___AMinusAssignOp___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:7115 */
+      /* ./parser//parser_prod.nit:7264 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7115);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7264);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7116 */
+      /* ./parser//parser_prod.nit:7265 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinuseq, ID_TMinuseq)) /*cast TMinuseq*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7116);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7265);
       }
-      /* ./parser//parser_prod.nit:7117 */
+      /* ./parser//parser_prod.nit:7266 */
       ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7119 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7119);
+      /* ./parser//parser_prod.nit:7268 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7268);
     }
-    /* ./parser//parser_prod.nit:7121 */
+    /* ./parser//parser_prod.nit:7270 */
     goto label1;
   }
   label1: while(0);
@@ -37594,7 +38398,7 @@ void parser_prod___AMinusAssignOp___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_prod;
-  fra.me.line = 7125;
+  fra.me.line = 7274;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -37602,11 +38406,11 @@ void 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:7127 */
+  /* ./parser//parser_prod.nit:7276 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7127);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser_prod, 7276);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -37614,32 +38418,32 @@ void parser_prod___AMinusAssignOp___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
-  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
+  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos257]) return;
+  if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7131;
+  fra.me.line = 7280;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
+  init_table[itpos259] = 1;
   return;
 }
 void 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 itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
+  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].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[itpos258]) return;
+  if (init_table[itpos260]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7133;
+  fra.me.line = 7282;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
@@ -37657,38 +38461,38 @@ void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2,
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:7142 */
+  /* ./parser//parser_prod.nit:7291 */
   CALL_parser_prod___AClosureDef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7143 */
+  /* ./parser//parser_prod.nit:7292 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7143);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7292);
   }
   ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7144 */
+  /* ./parser//parser_prod.nit:7293 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7144);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7293);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7145 */
+  /* ./parser//parser_prod.nit:7294 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7145);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7294);
   }
   ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7146 */
+  /* ./parser//parser_prod.nit:7295 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7146);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7295);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureDef___init_aclosuredef_1));
-  /* ./parser//parser_prod.nit:7152 */
+  /* ./parser//parser_prod.nit:7301 */
   ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:7153 */
+  /* ./parser//parser_prod.nit:7302 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37703,16 +38507,16 @@ void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7154 */
+    /* ./parser//parser_prod.nit:7303 */
     REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7154);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7303);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:7156 */
+  /* ./parser//parser_prod.nit:7305 */
   ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  /* ./parser//parser_prod.nit:7157 */
+  /* ./parser//parser_prod.nit:7306 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37727,16 +38531,16 @@ void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7158 */
+    /* ./parser//parser_prod.nit:7307 */
     REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7158);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7307);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:7160 */
+  /* ./parser//parser_prod.nit:7309 */
   ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  /* ./parser//parser_prod.nit:7161 */
+  /* ./parser//parser_prod.nit:7310 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37751,15 +38555,15 @@ void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2,
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7162 */
+    /* ./parser//parser_prod.nit:7311 */
     REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7162);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7311);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos258] = 1;
+  init_table[itpos260] = 1;
   return;
 }
   void OC_parser_prod___AClosureDef___init_aclosuredef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -37767,7 +38571,7 @@ void parser_prod___AClosureDef___init_aclosuredef(val_t p0, val_t p1, val_t p2,
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7147 */
+    /* ./parser//parser_prod.nit:7296 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -37780,21 +38584,21 @@ void parser_prod___AClosureDef___init_aclosuredef(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:7148 */
+    /* ./parser//parser_prod.nit:7297 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_TId, ID_TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7148);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7297);
     }
-    /* ./parser//parser_prod.nit:7149 */
+    /* ./parser//parser_prod.nit:7298 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7149);
+      nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7298);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AClosureDef____n_ids(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7150 */
+    /* ./parser//parser_prod.nit:7299 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -37809,7 +38613,7 @@ void parser_prod___AClosureDef___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_prod;
-  fra.me.line = 7166;
+  fra.me.line = 7315;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -37820,11 +38624,11 @@ void parser_prod___AClosureDef___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:7168 */
+  /* ./parser//parser_prod.nit:7317 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7168);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 7317);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37834,7 +38638,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7169 */
+    /* ./parser//parser_prod.nit:7318 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37849,32 +38653,32 @@ void parser_prod___AClosureDef___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:7170 */
+      /* ./parser//parser_prod.nit:7319 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7170);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7319);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7171 */
+      /* ./parser//parser_prod.nit:7320 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7171);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7320);
       }
-      /* ./parser//parser_prod.nit:7172 */
+      /* ./parser//parser_prod.nit:7321 */
       ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7174 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7174);
+      /* ./parser//parser_prod.nit:7323 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7323);
     }
-    /* ./parser//parser_prod.nit:7176 */
+    /* ./parser//parser_prod.nit:7325 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7178 */
+  /* ./parser//parser_prod.nit:7327 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7178);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7327);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -37884,7 +38688,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7179 */
+    /* ./parser//parser_prod.nit:7328 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -37899,33 +38703,33 @@ void parser_prod___AClosureDef___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:7180 */
+      /* ./parser//parser_prod.nit:7329 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7180);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7329);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7181 */
+      /* ./parser//parser_prod.nit:7330 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureId, ID_AClosureId)) /*cast AClosureId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7181);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7330);
       }
-      /* ./parser//parser_prod.nit:7182 */
+      /* ./parser//parser_prod.nit:7331 */
       ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7184 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7184);
+      /* ./parser//parser_prod.nit:7333 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7333);
     }
-    /* ./parser//parser_prod.nit:7186 */
+    /* ./parser//parser_prod.nit:7335 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7188 */
+  /* ./parser//parser_prod.nit:7337 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 7188);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7337);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -37935,13 +38739,13 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7188 */
+      /* ./parser//parser_prod.nit:7337 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7189 */
+      /* ./parser//parser_prod.nit:7338 */
       REGB3 = TAG_Bool(ATTR_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_prod, 7189);
+        nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7338);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -37958,7 +38762,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7190 */
+        /* ./parser//parser_prod.nit:7339 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -37973,37 +38777,37 @@ void parser_prod___AClosureDef___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:7191 */
+          /* ./parser//parser_prod.nit:7340 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7191);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7340);
           }
-          /* ./parser//parser_prod.nit:7192 */
+          /* ./parser//parser_prod.nit:7341 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7192);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7341);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7193 */
+          /* ./parser//parser_prod.nit:7342 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7193);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7342);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7195 */
+          /* ./parser//parser_prod.nit:7344 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7195);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7344);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7197 */
+        /* ./parser//parser_prod.nit:7346 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -38018,7 +38822,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:7200 */
+  /* ./parser//parser_prod.nit:7349 */
   fra.me.REG[3] = ATTR_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)) {
@@ -38033,7 +38837,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7201 */
+    /* ./parser//parser_prod.nit:7350 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38048,28 +38852,28 @@ void parser_prod___AClosureDef___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:7202 */
+      /* ./parser//parser_prod.nit:7351 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7202);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7351);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7203 */
+      /* ./parser//parser_prod.nit:7352 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7203);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7352);
       }
-      /* ./parser//parser_prod.nit:7204 */
+      /* ./parser//parser_prod.nit:7353 */
       ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7206 */
+      /* ./parser//parser_prod.nit:7355 */
       ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7208 */
+    /* ./parser//parser_prod.nit:7357 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7210 */
+  /* ./parser//parser_prod.nit:7359 */
   fra.me.REG[3] = ATTR_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)) {
@@ -38084,7 +38888,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7211 */
+    /* ./parser//parser_prod.nit:7360 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38099,28 +38903,28 @@ void parser_prod___AClosureDef___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:7212 */
+      /* ./parser//parser_prod.nit:7361 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7212);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7361);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7213 */
+      /* ./parser//parser_prod.nit:7362 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7213);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7362);
       }
-      /* ./parser//parser_prod.nit:7214 */
+      /* ./parser//parser_prod.nit:7363 */
       ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7216 */
+      /* ./parser//parser_prod.nit:7365 */
       ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7218 */
+    /* ./parser//parser_prod.nit:7367 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7220 */
+  /* ./parser//parser_prod.nit:7369 */
   fra.me.REG[3] = ATTR_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)) {
@@ -38135,7 +38939,7 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7221 */
+    /* ./parser//parser_prod.nit:7370 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38150,25 +38954,25 @@ void parser_prod___AClosureDef___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:7222 */
+      /* ./parser//parser_prod.nit:7371 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7222);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7371);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7223 */
+      /* ./parser//parser_prod.nit:7372 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7223);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7372);
       }
-      /* ./parser//parser_prod.nit:7224 */
+      /* ./parser//parser_prod.nit:7373 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7226 */
+      /* ./parser//parser_prod.nit:7375 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7228 */
+    /* ./parser//parser_prod.nit:7377 */
     goto label1;
   }
   label1: while(0);
@@ -38182,7 +38986,7 @@ void 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_prod;
-  fra.me.line = 7232;
+  fra.me.line = 7381;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38191,31 +38995,31 @@ void parser_prod___AClosureDef___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:7234 */
+  /* ./parser//parser_prod.nit:7383 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7234);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 7383);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7235 */
+  /* ./parser//parser_prod.nit:7384 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7235);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7384);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7236 */
+  /* ./parser//parser_prod.nit:7385 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7236);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7385);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AClosureDef___visit_all_1));
-  /* ./parser//parser_prod.nit:7239 */
+  /* ./parser//parser_prod.nit:7388 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -38231,16 +39035,16 @@ void 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:7240 */
+    /* ./parser//parser_prod.nit:7389 */
     fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7240);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7389);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:7242 */
+  /* ./parser//parser_prod.nit:7391 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -38256,16 +39060,16 @@ void 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:7243 */
+    /* ./parser//parser_prod.nit:7392 */
     fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7243);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7392);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:7245 */
+  /* ./parser//parser_prod.nit:7394 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -38281,12 +39085,12 @@ void 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:7246 */
+    /* ./parser//parser_prod.nit:7395 */
     fra.me.REG[0] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7246);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7395);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -38308,37 +39112,37 @@ void 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:7237 */
+    /* ./parser//parser_prod.nit:7386 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_table){
-  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
+  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos259]) return;
+  if (init_table[itpos261]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7251;
+  fra.me.line = 7400;
   fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
+  init_table[itpos261] = 1;
   return;
 }
 void parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
+  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos260]) return;
+  if (init_table[itpos262]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7253;
+  fra.me.line = 7402;
   fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38346,23 +39150,23 @@ void parser_prod___ASimpleClosureId___init_asimpleclosureid(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:7257 */
+  /* ./parser//parser_prod.nit:7406 */
   CALL_parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7258 */
+  /* ./parser//parser_prod.nit:7407 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7258);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7407);
   }
   ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7259 */
+  /* ./parser//parser_prod.nit:7408 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7259);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7408);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos260] = 1;
+  init_table[itpos262] = 1;
   return;
 }
 void parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2){
@@ -38372,7 +39176,7 @@ void parser_prod___ASimpleClosureId___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_prod;
-  fra.me.line = 7262;
+  fra.me.line = 7411;
   fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38383,11 +39187,11 @@ void parser_prod___ASimpleClosureId___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:7264 */
+  /* ./parser//parser_prod.nit:7413 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7264);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7413);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38397,7 +39201,7 @@ void parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7265 */
+    /* ./parser//parser_prod.nit:7414 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38412,25 +39216,25 @@ void parser_prod___ASimpleClosureId___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:7266 */
+      /* ./parser//parser_prod.nit:7415 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7266);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7415);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7267 */
+      /* ./parser//parser_prod.nit:7416 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7267);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7416);
       }
-      /* ./parser//parser_prod.nit:7268 */
+      /* ./parser//parser_prod.nit:7417 */
       ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7270 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7270);
+      /* ./parser//parser_prod.nit:7419 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7419);
     }
-    /* ./parser//parser_prod.nit:7272 */
+    /* ./parser//parser_prod.nit:7421 */
     goto label1;
   }
   label1: while(0);
@@ -38443,7 +39247,7 @@ void parser_prod___ASimpleClosureId___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_prod;
-  fra.me.line = 7276;
+  fra.me.line = 7425;
   fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38451,11 +39255,11 @@ void 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:7278 */
+  /* ./parser//parser_prod.nit:7427 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7278);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7427);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -38463,31 +39267,31 @@ void parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_table){
-  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos261]) return;
+  if (init_table[itpos263]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7282;
+  fra.me.line = 7431;
   fra.me.meth = LOCATE_parser_prod___ABreakClosureId___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
+  init_table[itpos263] = 1;
   return;
 }
 void parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos262]) return;
+  if (init_table[itpos264]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7284;
+  fra.me.line = 7433;
   fra.me.meth = LOCATE_parser_prod___ABreakClosureId___init_abreakclosureid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38495,23 +39299,23 @@ void parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val_t p1, in
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7288 */
+  /* ./parser//parser_prod.nit:7437 */
   CALL_parser_prod___ABreakClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7289 */
+  /* ./parser//parser_prod.nit:7438 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7289);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7438);
   }
   ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7290 */
+  /* ./parser//parser_prod.nit:7439 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7290);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7439);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
+  init_table[itpos264] = 1;
   return;
 }
 void parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2){
@@ -38521,7 +39325,7 @@ void parser_prod___ABreakClosureId___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_prod;
-  fra.me.line = 7293;
+  fra.me.line = 7442;
   fra.me.meth = LOCATE_parser_prod___ABreakClosureId___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38532,11 +39336,11 @@ void parser_prod___ABreakClosureId___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:7295 */
+  /* ./parser//parser_prod.nit:7444 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7295);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 7444);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38546,7 +39350,7 @@ void parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2)
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7296 */
+    /* ./parser//parser_prod.nit:7445 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38561,25 +39365,25 @@ void parser_prod___ABreakClosureId___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:7297 */
+      /* ./parser//parser_prod.nit:7446 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7297);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7446);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7298 */
+      /* ./parser//parser_prod.nit:7447 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7298);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7447);
       }
-      /* ./parser//parser_prod.nit:7299 */
+      /* ./parser//parser_prod.nit:7448 */
       ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7301 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7301);
+      /* ./parser//parser_prod.nit:7450 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7450);
     }
-    /* ./parser//parser_prod.nit:7303 */
+    /* ./parser//parser_prod.nit:7452 */
     goto label1;
   }
   label1: while(0);
@@ -38592,7 +39396,7 @@ void parser_prod___ABreakClosureId___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_prod;
-  fra.me.line = 7307;
+  fra.me.line = 7456;
   fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -38600,11 +39404,11 @@ void 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:7309 */
+  /* ./parser//parser_prod.nit:7458 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7309);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 7458);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -38612,31 +39416,31 @@ void parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AExternCalls___empty_init(val_t p0, int* init_table){
-  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCalls].i;
+  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCalls].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos263]) return;
+  if (init_table[itpos265]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7313;
+  fra.me.line = 7462;
   fra.me.meth = LOCATE_parser_prod___AExternCalls___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
+  init_table[itpos265] = 1;
   return;
 }
 void parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCalls].i;
+  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCalls].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[itpos266]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7315;
+  fra.me.line = 7464;
   fra.me.meth = LOCATE_parser_prod___AExternCalls___init_aexterncalls;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38646,24 +39450,24 @@ void parser_prod___AExternCalls___init_aexterncalls(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:7320 */
+  /* ./parser//parser_prod.nit:7469 */
   CALL_parser_prod___AExternCalls___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7321 */
+  /* ./parser//parser_prod.nit:7470 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7321);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7470);
   }
   ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7322 */
+  /* ./parser//parser_prod.nit:7471 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7322);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7471);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AExternCalls___init_aexterncalls_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos264] = 1;
+  init_table[itpos266] = 1;
   return;
 }
   void OC_parser_prod___AExternCalls___init_aexterncalls_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -38671,7 +39475,7 @@ void parser_prod___AExternCalls___init_aexterncalls(val_t p0, val_t p1, val_t p2
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7323 */
+    /* ./parser//parser_prod.nit:7472 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -38684,21 +39488,21 @@ void parser_prod___AExternCalls___init_aexterncalls(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:7324 */
+    /* ./parser//parser_prod.nit:7473 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExternCall, ID_AExternCall)) /*cast AExternCall*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7324);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7473);
     }
-    /* ./parser//parser_prod.nit:7325 */
+    /* ./parser//parser_prod.nit:7474 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AExternCalls____n_extern_calls(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7325);
+      nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7474);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AExternCalls____n_extern_calls(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7326 */
+    /* ./parser//parser_prod.nit:7475 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -38713,7 +39517,7 @@ void parser_prod___AExternCalls___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_prod;
-  fra.me.line = 7330;
+  fra.me.line = 7479;
   fra.me.meth = LOCATE_parser_prod___AExternCalls___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -38724,11 +39528,11 @@ void parser_prod___AExternCalls___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:7332 */
+  /* ./parser//parser_prod.nit:7481 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7332);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 7481);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -38738,7 +39542,7 @@ void parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7333 */
+    /* ./parser//parser_prod.nit:7482 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -38753,33 +39557,33 @@ void parser_prod___AExternCalls___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:7334 */
+      /* ./parser//parser_prod.nit:7483 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7334);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7483);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7335 */
+      /* ./parser//parser_prod.nit:7484 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7335);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7484);
       }
-      /* ./parser//parser_prod.nit:7336 */
+      /* ./parser//parser_prod.nit:7485 */
       ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7338 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7338);
+      /* ./parser//parser_prod.nit:7487 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7487);
     }
-    /* ./parser//parser_prod.nit:7340 */
+    /* ./parser//parser_prod.nit:7489 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7342 */
+  /* ./parser//parser_prod.nit:7491 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 7342);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7491);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -38789,13 +39593,13 @@ void parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7342 */
+      /* ./parser//parser_prod.nit:7491 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7343 */
+      /* ./parser//parser_prod.nit:7492 */
       REGB3 = TAG_Bool(ATTR_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_prod, 7343);
+        nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7492);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -38812,7 +39616,7 @@ void parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7344 */
+        /* ./parser//parser_prod.nit:7493 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -38827,37 +39631,37 @@ void parser_prod___AExternCalls___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:7345 */
+          /* ./parser//parser_prod.nit:7494 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExternCall, ID_AExternCall)) /*cast AExternCall*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7345);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7494);
           }
-          /* ./parser//parser_prod.nit:7346 */
+          /* ./parser//parser_prod.nit:7495 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7346);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7495);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7347 */
+          /* ./parser//parser_prod.nit:7496 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7347);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7496);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7349 */
+          /* ./parser//parser_prod.nit:7498 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7349);
+            nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7498);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7351 */
+        /* ./parser//parser_prod.nit:7500 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -38882,7 +39686,7 @@ void parser_prod___AExternCalls___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_prod;
-  fra.me.line = 7356;
+  fra.me.line = 7505;
   fra.me.meth = LOCATE_parser_prod___AExternCalls___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38891,19 +39695,19 @@ void 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:7358 */
+  /* ./parser//parser_prod.nit:7507 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7358);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 7507);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7359 */
+  /* ./parser//parser_prod.nit:7508 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7359);
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7508);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AExternCalls____n_extern_calls(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AExternCalls___visit_all_1));
@@ -38925,45 +39729,45 @@ void 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:7360 */
+    /* ./parser//parser_prod.nit:7509 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___AExternCall___empty_init(val_t p0, int* init_table){
-  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCall].i;
+  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos265]) return;
+  if (init_table[itpos267]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7365;
+  fra.me.line = 7514;
   fra.me.meth = LOCATE_parser_prod___AExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
+  init_table[itpos267] = 1;
   return;
 }
 void parser_prod___AExternCall___init_aexterncall(val_t p0, int* init_table){
-  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCall].i;
+  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos266]) return;
+  if (init_table[itpos268]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7367;
+  fra.me.line = 7516;
   fra.me.meth = LOCATE_parser_prod___AExternCall___init_aexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:7369 */
+  /* ./parser//parser_prod.nit:7518 */
   CALL_parser_prod___AExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
+  init_table[itpos268] = 1;
   return;
 }
 void parser_prod___AExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -38971,7 +39775,7 @@ void parser_prod___AExternCall___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_prod;
-  fra.me.line = 7372;
+  fra.me.line = 7521;
   fra.me.meth = LOCATE_parser_prod___AExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -38989,7 +39793,7 @@ void parser_prod___AExternCall___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_prod;
-  fra.me.line = 7376;
+  fra.me.line = 7525;
   fra.me.meth = LOCATE_parser_prod___AExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39001,31 +39805,31 @@ void parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ASuperExternCall___empty_init(val_t p0, int* init_table){
-  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExternCall].i;
+  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos267]) return;
+  if (init_table[itpos269]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7381;
+  fra.me.line = 7530;
   fra.me.meth = LOCATE_parser_prod___ASuperExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
+  init_table[itpos269] = 1;
   return;
 }
 void parser_prod___ASuperExternCall___init_asuperexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExternCall].i;
+  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExternCall].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos268]) return;
+  if (init_table[itpos270]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7383;
+  fra.me.line = 7532;
   fra.me.meth = LOCATE_parser_prod___ASuperExternCall___init_asuperexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39033,23 +39837,23 @@ void parser_prod___ASuperExternCall___init_asuperexterncall(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:7387 */
+  /* ./parser//parser_prod.nit:7536 */
   CALL_parser_prod___ASuperExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7388 */
+  /* ./parser//parser_prod.nit:7537 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7388);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7537);
   }
   ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7389 */
+  /* ./parser//parser_prod.nit:7538 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7389);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7538);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
+  init_table[itpos270] = 1;
   return;
 }
 void parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39059,7 +39863,7 @@ void parser_prod___ASuperExternCall___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_prod;
-  fra.me.line = 7392;
+  fra.me.line = 7541;
   fra.me.meth = LOCATE_parser_prod___ASuperExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39070,11 +39874,11 @@ void parser_prod___ASuperExternCall___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:7394 */
+  /* ./parser//parser_prod.nit:7543 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7394);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 7543);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39084,7 +39888,7 @@ void parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1, val_t p2
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7395 */
+    /* ./parser//parser_prod.nit:7544 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39099,25 +39903,25 @@ void parser_prod___ASuperExternCall___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:7396 */
+      /* ./parser//parser_prod.nit:7545 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7396);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7545);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7397 */
+      /* ./parser//parser_prod.nit:7546 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7397);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7546);
       }
-      /* ./parser//parser_prod.nit:7398 */
+      /* ./parser//parser_prod.nit:7547 */
       ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7400 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7400);
+      /* ./parser//parser_prod.nit:7549 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7549);
     }
-    /* ./parser//parser_prod.nit:7402 */
+    /* ./parser//parser_prod.nit:7551 */
     goto label1;
   }
   label1: while(0);
@@ -39130,7 +39934,7 @@ void parser_prod___ASuperExternCall___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_prod;
-  fra.me.line = 7406;
+  fra.me.line = 7555;
   fra.me.meth = LOCATE_parser_prod___ASuperExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39138,11 +39942,11 @@ void 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:7408 */
+  /* ./parser//parser_prod.nit:7557 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7408);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 7557);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -39150,31 +39954,31 @@ void parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALocalPropExternCall].i;
+  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALocalPropExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos269]) return;
+  if (init_table[itpos271]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7412;
+  fra.me.line = 7561;
   fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
+  init_table[itpos271] = 1;
   return;
 }
 void parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALocalPropExternCall].i;
+  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALocalPropExternCall].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos270]) return;
+  if (init_table[itpos272]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7414;
+  fra.me.line = 7563;
   fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39182,23 +39986,23 @@ void parser_prod___ALocalPropExternCall___init_alocalpropexterncall(val_t p0, va
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7418 */
+  /* ./parser//parser_prod.nit:7567 */
   CALL_parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7419 */
+  /* ./parser//parser_prod.nit:7568 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7419);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7568);
   }
   ATTR_parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7420 */
+  /* ./parser//parser_prod.nit:7569 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7420);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7569);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
+  init_table[itpos272] = 1;
   return;
 }
 void parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39208,7 +40012,7 @@ void parser_prod___ALocalPropExternCall___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_prod;
-  fra.me.line = 7423;
+  fra.me.line = 7572;
   fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39219,11 +40023,11 @@ void parser_prod___ALocalPropExternCall___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:7425 */
+  /* ./parser//parser_prod.nit:7574 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7425);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser_prod, 7574);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39233,7 +40037,7 @@ void parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7426 */
+    /* ./parser//parser_prod.nit:7575 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39248,25 +40052,25 @@ void parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7427 */
+      /* ./parser//parser_prod.nit:7576 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7427);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7576);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7428 */
+      /* ./parser//parser_prod.nit:7577 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7428);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7577);
       }
-      /* ./parser//parser_prod.nit:7429 */
+      /* ./parser//parser_prod.nit:7578 */
       ATTR_parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7431 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7431);
+      /* ./parser//parser_prod.nit:7580 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7580);
     }
-    /* ./parser//parser_prod.nit:7433 */
+    /* ./parser//parser_prod.nit:7582 */
     goto label1;
   }
   label1: while(0);
@@ -39279,7 +40083,7 @@ void parser_prod___ALocalPropExternCall___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_prod;
-  fra.me.line = 7437;
+  fra.me.line = 7586;
   fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39287,11 +40091,11 @@ void 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:7439 */
+  /* ./parser//parser_prod.nit:7588 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7439);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser_prod, 7588);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -39299,32 +40103,32 @@ void parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFullPropExternCall].i;
+  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFullPropExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos271]) return;
+  if (init_table[itpos273]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7443;
+  fra.me.line = 7592;
   fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos271] = 1;
+  init_table[itpos273] = 1;
   return;
 }
 void parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFullPropExternCall].i;
+  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFullPropExternCall].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[itpos272]) return;
+  if (init_table[itpos274]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7445;
+  fra.me.line = 7594;
   fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___init_afullpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39336,24 +40140,24 @@ void parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t p0, val_
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7451 */
+  /* ./parser//parser_prod.nit:7600 */
   CALL_parser_prod___AFullPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7452 */
+  /* ./parser//parser_prod.nit:7601 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7452);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7601);
   }
   ATTR_parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7453 */
+  /* ./parser//parser_prod.nit:7602 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7453);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7602);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7454 */
+  /* ./parser//parser_prod.nit:7603 */
   ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7455 */
+  /* ./parser//parser_prod.nit:7604 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39368,28 +40172,28 @@ void parser_prod___AFullPropExternCall___init_afullpropexterncall(val_t p0, val_
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7456 */
+    /* ./parser//parser_prod.nit:7605 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7456);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7605);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:7458 */
+  /* ./parser//parser_prod.nit:7607 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7458);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7607);
   }
   ATTR_parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7459 */
+  /* ./parser//parser_prod.nit:7608 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7459);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7608);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos272] = 1;
+  init_table[itpos274] = 1;
   return;
 }
 void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39399,7 +40203,7 @@ void parser_prod___AFullPropExternCall___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_prod;
-  fra.me.line = 7462;
+  fra.me.line = 7611;
   fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39410,11 +40214,11 @@ void parser_prod___AFullPropExternCall___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:7464 */
+  /* ./parser//parser_prod.nit:7613 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7464);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser_prod, 7613);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39424,7 +40228,7 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7465 */
+    /* ./parser//parser_prod.nit:7614 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39439,28 +40243,28 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7466 */
+      /* ./parser//parser_prod.nit:7615 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7466);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7615);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7467 */
+      /* ./parser//parser_prod.nit:7616 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7467);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7616);
       }
-      /* ./parser//parser_prod.nit:7468 */
+      /* ./parser//parser_prod.nit:7617 */
       ATTR_parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7470 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7470);
+      /* ./parser//parser_prod.nit:7619 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7619);
     }
-    /* ./parser//parser_prod.nit:7472 */
+    /* ./parser//parser_prod.nit:7621 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7474 */
+  /* ./parser//parser_prod.nit:7623 */
   fra.me.REG[3] = ATTR_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)) {
@@ -39475,7 +40279,7 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7475 */
+    /* ./parser//parser_prod.nit:7624 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39490,32 +40294,32 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7476 */
+      /* ./parser//parser_prod.nit:7625 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7476);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7625);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7477 */
+      /* ./parser//parser_prod.nit:7626 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TQuad, ID_TQuad)) /*cast TQuad*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7477);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7626);
       }
-      /* ./parser//parser_prod.nit:7478 */
+      /* ./parser//parser_prod.nit:7627 */
       ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7480 */
+      /* ./parser//parser_prod.nit:7629 */
       ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7482 */
+    /* ./parser//parser_prod.nit:7631 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7484 */
+  /* ./parser//parser_prod.nit:7633 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7484);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser_prod, 7633);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39525,7 +40329,7 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7485 */
+    /* ./parser//parser_prod.nit:7634 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39540,25 +40344,25 @@ void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7486 */
+      /* ./parser//parser_prod.nit:7635 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7486);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7635);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7487 */
+      /* ./parser//parser_prod.nit:7636 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7487);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7636);
       }
-      /* ./parser//parser_prod.nit:7488 */
+      /* ./parser//parser_prod.nit:7637 */
       ATTR_parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7490 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7490);
+      /* ./parser//parser_prod.nit:7639 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7639);
     }
-    /* ./parser//parser_prod.nit:7492 */
+    /* ./parser//parser_prod.nit:7641 */
     goto label1;
   }
   label1: while(0);
@@ -39572,7 +40376,7 @@ void 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_prod;
-  fra.me.line = 7496;
+  fra.me.line = 7645;
   fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -39581,15 +40385,15 @@ void parser_prod___AFullPropExternCall___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:7498 */
+  /* ./parser//parser_prod.nit:7647 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7498);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser_prod, 7647);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7499 */
+  /* ./parser//parser_prod.nit:7648 */
   fra.me.REG[2] = ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -39605,20 +40409,20 @@ void 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:7500 */
+    /* ./parser//parser_prod.nit:7649 */
     fra.me.REG[2] = ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TQuad, ID_TQuad)) /*cast TQuad*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7500);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7649);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:7502 */
+  /* ./parser//parser_prod.nit:7651 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7502);
+    nit_abort("Uninitialized attribute %s", "_n_methid", LOCATE_parser_prod, 7651);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -39626,31 +40430,31 @@ void parser_prod___AFullPropExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init_table){
-  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitPropExternCall].i;
+  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitPropExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos273]) return;
+  if (init_table[itpos275]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7506;
+  fra.me.line = 7655;
   fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
+  init_table[itpos275] = 1;
   return;
 }
 void parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t p0, val_t p1, int* init_table){
-  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitPropExternCall].i;
+  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitPropExternCall].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos274]) return;
+  if (init_table[itpos276]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7508;
+  fra.me.line = 7657;
   fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___init_ainitpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39658,23 +40462,23 @@ void parser_prod___AInitPropExternCall___init_ainitpropexterncall(val_t p0, val_
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7512 */
+  /* ./parser//parser_prod.nit:7661 */
   CALL_parser_prod___AInitPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7513 */
+  /* ./parser//parser_prod.nit:7662 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7513);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7662);
   }
   ATTR_parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7514 */
+  /* ./parser//parser_prod.nit:7663 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7514);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7663);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
+  init_table[itpos276] = 1;
   return;
 }
 void parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39684,7 +40488,7 @@ void parser_prod___AInitPropExternCall___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_prod;
-  fra.me.line = 7517;
+  fra.me.line = 7666;
   fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39695,11 +40499,11 @@ void parser_prod___AInitPropExternCall___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:7519 */
+  /* ./parser//parser_prod.nit:7668 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7519);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser_prod, 7668);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39709,7 +40513,7 @@ void parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7520 */
+    /* ./parser//parser_prod.nit:7669 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39724,25 +40528,25 @@ void parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7521 */
+      /* ./parser//parser_prod.nit:7670 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7521);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7670);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7522 */
+      /* ./parser//parser_prod.nit:7671 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7522);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7671);
       }
-      /* ./parser//parser_prod.nit:7523 */
+      /* ./parser//parser_prod.nit:7672 */
       ATTR_parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7525 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7525);
+      /* ./parser//parser_prod.nit:7674 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7674);
     }
-    /* ./parser//parser_prod.nit:7527 */
+    /* ./parser//parser_prod.nit:7676 */
     goto label1;
   }
   label1: while(0);
@@ -39755,7 +40559,7 @@ void parser_prod___AInitPropExternCall___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_prod;
-  fra.me.line = 7531;
+  fra.me.line = 7680;
   fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -39763,11 +40567,11 @@ void 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:7533 */
+  /* ./parser//parser_prod.nit:7682 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7533);
+    nit_abort("Uninitialized attribute %s", "_n_classid", LOCATE_parser_prod, 7682);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -39775,31 +40579,31 @@ void parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_table){
-  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACastAsExternCall].i;
+  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACastAsExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos275]) return;
+  if (init_table[itpos277]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7537;
+  fra.me.line = 7686;
   fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
+  init_table[itpos277] = 1;
   return;
 }
 void parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACastAsExternCall].i;
+  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACastAsExternCall].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[itpos278]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7539;
+  fra.me.line = 7688;
   fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___init_acastasexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39811,49 +40615,49 @@ void parser_prod___ACastAsExternCall___init_acastasexterncall(val_t p0, val_t p1
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7545 */
+  /* ./parser//parser_prod.nit:7694 */
   CALL_parser_prod___ACastAsExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7546 */
+  /* ./parser//parser_prod.nit:7695 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7546);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7695);
   }
   ATTR_parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7547 */
+  /* ./parser//parser_prod.nit:7696 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7547);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7696);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7548 */
+  /* ./parser//parser_prod.nit:7697 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7548);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7697);
   }
   ATTR_parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7549 */
+  /* ./parser//parser_prod.nit:7698 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7549);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7698);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7550 */
+  /* ./parser//parser_prod.nit:7699 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7550);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7699);
   }
   ATTR_parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7551 */
+  /* ./parser//parser_prod.nit:7700 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7551);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7700);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos276] = 1;
+  init_table[itpos278] = 1;
   return;
 }
 void parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39863,7 +40667,7 @@ void parser_prod___ACastAsExternCall___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_prod;
-  fra.me.line = 7554;
+  fra.me.line = 7703;
   fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39874,11 +40678,11 @@ void parser_prod___ACastAsExternCall___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:7556 */
+  /* ./parser//parser_prod.nit:7705 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7556);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser_prod, 7705);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39888,7 +40692,7 @@ void parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7557 */
+    /* ./parser//parser_prod.nit:7706 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39903,32 +40707,32 @@ void parser_prod___ACastAsExternCall___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:7558 */
+      /* ./parser//parser_prod.nit:7707 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7558);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7707);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7559 */
+      /* ./parser//parser_prod.nit:7708 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7559);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7708);
       }
-      /* ./parser//parser_prod.nit:7560 */
+      /* ./parser//parser_prod.nit:7709 */
       ATTR_parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7562 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7562);
+      /* ./parser//parser_prod.nit:7711 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7711);
     }
-    /* ./parser//parser_prod.nit:7564 */
+    /* ./parser//parser_prod.nit:7713 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7566 */
+  /* ./parser//parser_prod.nit:7715 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7566);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7715);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39938,7 +40742,7 @@ void parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7567 */
+    /* ./parser//parser_prod.nit:7716 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -39953,32 +40757,32 @@ void parser_prod___ACastAsExternCall___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:7568 */
+      /* ./parser//parser_prod.nit:7717 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7568);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7717);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7569 */
+      /* ./parser//parser_prod.nit:7718 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7569);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7718);
       }
-      /* ./parser//parser_prod.nit:7570 */
+      /* ./parser//parser_prod.nit:7719 */
       ATTR_parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7572 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7572);
+      /* ./parser//parser_prod.nit:7721 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7721);
     }
-    /* ./parser//parser_prod.nit:7574 */
+    /* ./parser//parser_prod.nit:7723 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7576 */
+  /* ./parser//parser_prod.nit:7725 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7576);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser_prod, 7725);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -39988,7 +40792,7 @@ void parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7577 */
+    /* ./parser//parser_prod.nit:7726 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40003,25 +40807,25 @@ void parser_prod___ACastAsExternCall___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:7578 */
+      /* ./parser//parser_prod.nit:7727 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7578);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7727);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7579 */
+      /* ./parser//parser_prod.nit:7728 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7579);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7728);
       }
-      /* ./parser//parser_prod.nit:7580 */
+      /* ./parser//parser_prod.nit:7729 */
       ATTR_parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7582 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7582);
+      /* ./parser//parser_prod.nit:7731 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7731);
     }
-    /* ./parser//parser_prod.nit:7584 */
+    /* ./parser//parser_prod.nit:7733 */
     goto label1;
   }
   label1: while(0);
@@ -40034,7 +40838,7 @@ void parser_prod___ACastAsExternCall___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_prod;
-  fra.me.line = 7588;
+  fra.me.line = 7737;
   fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40043,27 +40847,27 @@ void 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:7590 */
+  /* ./parser//parser_prod.nit:7739 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7590);
+    nit_abort("Uninitialized attribute %s", "_n_from_type", LOCATE_parser_prod, 7739);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7591 */
+  /* ./parser//parser_prod.nit:7740 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7591);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7740);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7592 */
+  /* ./parser//parser_prod.nit:7741 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7592);
+    nit_abort("Uninitialized attribute %s", "_n_to_type", LOCATE_parser_prod, 7741);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40071,31 +40875,31 @@ void parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* init_table){
-  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNullableExternCall].i;
+  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos277]) return;
+  if (init_table[itpos279]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7596;
+  fra.me.line = 7745;
   fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
+  init_table[itpos279] = 1;
   return;
 }
 void parser_prod___AAsNullableExternCall___init_aasnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNullableExternCall].i;
+  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNullableExternCall].i;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos278]) return;
+  if (init_table[itpos280]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7598;
+  fra.me.line = 7747;
   fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40107,49 +40911,49 @@ void parser_prod___AAsNullableExternCall___init_aasnullableexterncall(val_t p0,
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7604 */
+  /* ./parser//parser_prod.nit:7753 */
   CALL_parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7605 */
+  /* ./parser//parser_prod.nit:7754 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7605);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7754);
   }
   ATTR_parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7606 */
+  /* ./parser//parser_prod.nit:7755 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7606);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7755);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7607 */
+  /* ./parser//parser_prod.nit:7756 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7607);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7756);
   }
   ATTR_parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7608 */
+  /* ./parser//parser_prod.nit:7757 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7608);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7757);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7609 */
+  /* ./parser//parser_prod.nit:7758 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7609);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7758);
   }
   ATTR_parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7610 */
+  /* ./parser//parser_prod.nit:7759 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7610);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7759);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos278] = 1;
+  init_table[itpos280] = 1;
   return;
 }
 void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -40159,7 +40963,7 @@ void parser_prod___AAsNullableExternCall___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_prod;
-  fra.me.line = 7613;
+  fra.me.line = 7762;
   fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40170,11 +40974,11 @@ void parser_prod___AAsNullableExternCall___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:7615 */
+  /* ./parser//parser_prod.nit:7764 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7615);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7764);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40184,7 +40988,7 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7616 */
+    /* ./parser//parser_prod.nit:7765 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40199,32 +41003,32 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7617 */
+      /* ./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_prod, 7617);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7766);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7618 */
+      /* ./parser//parser_prod.nit:7767 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7618);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7767);
       }
-      /* ./parser//parser_prod.nit:7619 */
+      /* ./parser//parser_prod.nit:7768 */
       ATTR_parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7621 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7621);
+      /* ./parser//parser_prod.nit:7770 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7770);
     }
-    /* ./parser//parser_prod.nit:7623 */
+    /* ./parser//parser_prod.nit:7772 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7625 */
+  /* ./parser//parser_prod.nit:7774 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7625);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7774);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40234,7 +41038,7 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7626 */
+    /* ./parser//parser_prod.nit:7775 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40249,32 +41053,32 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7627 */
+      /* ./parser//parser_prod.nit:7776 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7627);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7776);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7628 */
+      /* ./parser//parser_prod.nit:7777 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7628);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7777);
       }
-      /* ./parser//parser_prod.nit:7629 */
+      /* ./parser//parser_prod.nit:7778 */
       ATTR_parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7631 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7631);
+      /* ./parser//parser_prod.nit:7780 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7780);
     }
-    /* ./parser//parser_prod.nit:7633 */
+    /* ./parser//parser_prod.nit:7782 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7635 */
+  /* ./parser//parser_prod.nit:7784 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7635);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser_prod, 7784);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40284,7 +41088,7 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7636 */
+    /* ./parser//parser_prod.nit:7785 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40299,25 +41103,25 @@ void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7637 */
+      /* ./parser//parser_prod.nit:7786 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7637);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7786);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7638 */
+      /* ./parser//parser_prod.nit:7787 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7638);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7787);
       }
-      /* ./parser//parser_prod.nit:7639 */
+      /* ./parser//parser_prod.nit:7788 */
       ATTR_parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7641 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7641);
+      /* ./parser//parser_prod.nit:7790 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7790);
     }
-    /* ./parser//parser_prod.nit:7643 */
+    /* ./parser//parser_prod.nit:7792 */
     goto label1;
   }
   label1: while(0);
@@ -40330,7 +41134,7 @@ void parser_prod___AAsNullableExternCall___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_prod;
-  fra.me.line = 7647;
+  fra.me.line = 7796;
   fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40339,27 +41143,27 @@ void 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:7649 */
+  /* ./parser//parser_prod.nit:7798 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7649);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7798);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7650 */
+  /* ./parser//parser_prod.nit:7799 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7650);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7799);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7651 */
+  /* ./parser//parser_prod.nit:7800 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7651);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser_prod, 7800);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40367,31 +41171,31 @@ void parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int* init_table){
-  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotNullableExternCall].i;
+  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotNullableExternCall].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos279]) return;
+  if (init_table[itpos281]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7655;
+  fra.me.line = 7804;
   fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
+  init_table[itpos281] = 1;
   return;
 }
 void parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, int* init_table){
-  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotNullableExternCall].i;
+  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotNullableExternCall].i;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos280]) return;
+  if (init_table[itpos282]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7657;
+  fra.me.line = 7806;
   fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -40405,62 +41209,62 @@ void parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(val_
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7664 */
+  /* ./parser//parser_prod.nit:7813 */
   CALL_parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7665 */
+  /* ./parser//parser_prod.nit:7814 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7665);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7814);
   }
   ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7666 */
+  /* ./parser//parser_prod.nit:7815 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7666);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7815);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7667 */
+  /* ./parser//parser_prod.nit:7816 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7667);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7816);
   }
   ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7668 */
+  /* ./parser//parser_prod.nit:7817 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7668);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7817);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7669 */
+  /* ./parser//parser_prod.nit:7818 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7669);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7818);
   }
   ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
-  /* ./parser//parser_prod.nit:7670 */
+  /* ./parser//parser_prod.nit:7819 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7670);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7819);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:7671 */
+  /* ./parser//parser_prod.nit:7820 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7671);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7820);
   }
   ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[4];
-  /* ./parser//parser_prod.nit:7672 */
+  /* ./parser//parser_prod.nit:7821 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7672);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7821);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
+  init_table[itpos282] = 1;
   return;
 }
 void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
@@ -40470,7 +41274,7 @@ void parser_prod___AAsNotNullableExternCall___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_prod;
-  fra.me.line = 7675;
+  fra.me.line = 7824;
   fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40481,11 +41285,11 @@ void parser_prod___AAsNotNullableExternCall___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:7677 */
+  /* ./parser//parser_prod.nit:7826 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7677);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7826);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40495,7 +41299,7 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7678 */
+    /* ./parser//parser_prod.nit:7827 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40510,32 +41314,32 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7679 */
+      /* ./parser//parser_prod.nit:7828 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7679);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7828);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7680 */
+      /* ./parser//parser_prod.nit:7829 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7680);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7829);
       }
-      /* ./parser//parser_prod.nit:7681 */
+      /* ./parser//parser_prod.nit:7830 */
       ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7683 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7683);
+      /* ./parser//parser_prod.nit:7832 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7832);
     }
-    /* ./parser//parser_prod.nit:7685 */
+    /* ./parser//parser_prod.nit:7834 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7687 */
+  /* ./parser//parser_prod.nit:7836 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7687);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7836);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40545,7 +41349,7 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7688 */
+    /* ./parser//parser_prod.nit:7837 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40560,32 +41364,32 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7689 */
+      /* ./parser//parser_prod.nit:7838 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7689);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7838);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7690 */
+      /* ./parser//parser_prod.nit:7839 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7690);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7839);
       }
-      /* ./parser//parser_prod.nit:7691 */
+      /* ./parser//parser_prod.nit:7840 */
       ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7693 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7693);
+      /* ./parser//parser_prod.nit:7842 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7842);
     }
-    /* ./parser//parser_prod.nit:7695 */
+    /* ./parser//parser_prod.nit:7844 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7697 */
+  /* ./parser//parser_prod.nit:7846 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7697);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 7846);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40595,7 +41399,7 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7698 */
+    /* ./parser//parser_prod.nit:7847 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40610,32 +41414,32 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7699 */
+      /* ./parser//parser_prod.nit:7848 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7699);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7848);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7700 */
+      /* ./parser//parser_prod.nit:7849 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7700);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7849);
       }
-      /* ./parser//parser_prod.nit:7701 */
+      /* ./parser//parser_prod.nit:7850 */
       ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7703 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7703);
+      /* ./parser//parser_prod.nit:7852 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7852);
     }
-    /* ./parser//parser_prod.nit:7705 */
+    /* ./parser//parser_prod.nit:7854 */
     goto label1;
   }
-  /* ./parser//parser_prod.nit:7707 */
+  /* ./parser//parser_prod.nit:7856 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7707);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser_prod, 7856);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -40645,7 +41449,7 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7708 */
+    /* ./parser//parser_prod.nit:7857 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40660,25 +41464,25 @@ void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1,
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser_prod.nit:7709 */
+      /* ./parser//parser_prod.nit:7858 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7709);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7858);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7710 */
+      /* ./parser//parser_prod.nit:7859 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7710);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7859);
       }
-      /* ./parser//parser_prod.nit:7711 */
+      /* ./parser//parser_prod.nit:7860 */
       ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7713 */
-      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7713);
+      /* ./parser//parser_prod.nit:7862 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7862);
     }
-    /* ./parser//parser_prod.nit:7715 */
+    /* ./parser//parser_prod.nit:7864 */
     goto label1;
   }
   label1: while(0);
@@ -40691,7 +41495,7 @@ void parser_prod___AAsNotNullableExternCall___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_prod;
-  fra.me.line = 7719;
+  fra.me.line = 7868;
   fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40700,35 +41504,35 @@ void parser_prod___AAsNotNullableExternCall___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:7721 */
+  /* ./parser//parser_prod.nit:7870 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7721);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7870);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7722 */
+  /* ./parser//parser_prod.nit:7871 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7722);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7871);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7723 */
+  /* ./parser//parser_prod.nit:7872 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7723);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 7872);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7724 */
+  /* ./parser//parser_prod.nit:7873 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7724);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser_prod, 7873);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
@@ -40736,32 +41540,32 @@ void parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t p1){
   return;
 }
 void parser_prod___AQualified___empty_init(val_t p0, int* init_table){
-  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
+  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos281]) return;
+  if (init_table[itpos283]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7728;
+  fra.me.line = 7877;
   fra.me.meth = LOCATE_parser_prod___AQualified___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
+  init_table[itpos283] = 1;
   return;
 }
 void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
+  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_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[itpos282]) return;
+  if (init_table[itpos284]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7730;
+  fra.me.line = 7879;
   fra.me.meth = LOCATE_parser_prod___AQualified___init_aqualified;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40771,12 +41575,12 @@ void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, in
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7735 */
+  /* ./parser//parser_prod.nit:7884 */
   CALL_parser_prod___AQualified___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___AQualified___init_aqualified_1));
-  /* ./parser//parser_prod.nit:7741 */
+  /* ./parser//parser_prod.nit:7890 */
   ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
-  /* ./parser//parser_prod.nit:7742 */
+  /* ./parser//parser_prod.nit:7891 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40791,15 +41595,15 @@ void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, in
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7743 */
+    /* ./parser//parser_prod.nit:7892 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7743);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7892);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos282] = 1;
+  init_table[itpos284] = 1;
   return;
 }
   void OC_parser_prod___AQualified___init_aqualified_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -40807,7 +41611,7 @@ void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, in
     val_t REGB0;
     fun_t CREG[1];
     val_t tmp;
-    /* ./parser//parser_prod.nit:7736 */
+    /* ./parser//parser_prod.nit:7885 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -40820,21 +41624,21 @@ void parser_prod___AQualified___init_aqualified(val_t p0, val_t p1, val_t p2, in
     fra.me.closure_funs = CREG;
     fra.me.REG[0] = p0;
     CREG[0] = clos_fun0;
-    /* ./parser//parser_prod.nit:7737 */
+    /* ./parser//parser_prod.nit:7886 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_TId, ID_TId)) /*cast TId*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7737);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7886);
     }
-    /* ./parser//parser_prod.nit:7738 */
+    /* ./parser//parser_prod.nit:7887 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7738);
+      nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7887);
     }
     fra.me.REG[1] = ATTR_parser_nodes___AQualified____n_id(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7739 */
+    /* ./parser//parser_prod.nit:7888 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -40849,7 +41653,7 @@ void parser_prod___AQualified___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_prod;
-  fra.me.line = 7747;
+  fra.me.line = 7896;
   fra.me.meth = LOCATE_parser_prod___AQualified___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40860,12 +41664,12 @@ void parser_prod___AQualified___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:7749 */
+  /* ./parser//parser_prod.nit:7898 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 7749);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7898);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -40875,13 +41679,13 @@ void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7749 */
+      /* ./parser//parser_prod.nit:7898 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7750 */
+      /* ./parser//parser_prod.nit:7899 */
       REGB3 = TAG_Bool(ATTR_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_prod, 7750);
+        nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7899);
       }
       fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -40898,7 +41702,7 @@ void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7751 */
+        /* ./parser//parser_prod.nit:7900 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -40913,37 +41717,37 @@ void parser_prod___AQualified___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:7752 */
+          /* ./parser//parser_prod.nit:7901 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7752);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7901);
           }
-          /* ./parser//parser_prod.nit:7753 */
+          /* ./parser//parser_prod.nit:7902 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7753);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7902);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7754 */
+          /* ./parser//parser_prod.nit:7903 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7754);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7903);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7756 */
+          /* ./parser//parser_prod.nit:7905 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7756);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7905);
           }
           fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7758 */
+        /* ./parser//parser_prod.nit:7907 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -40958,7 +41762,7 @@ void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   label2: while(0);
-  /* ./parser//parser_prod.nit:7761 */
+  /* ./parser//parser_prod.nit:7910 */
   fra.me.REG[3] = ATTR_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)) {
@@ -40973,7 +41777,7 @@ void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7762 */
+    /* ./parser//parser_prod.nit:7911 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -40988,25 +41792,25 @@ void parser_prod___AQualified___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:7763 */
+      /* ./parser//parser_prod.nit:7912 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7763);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7912);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7764 */
+      /* ./parser//parser_prod.nit:7913 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7764);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7913);
       }
-      /* ./parser//parser_prod.nit:7765 */
+      /* ./parser//parser_prod.nit:7914 */
       ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7767 */
+      /* ./parser//parser_prod.nit:7916 */
       ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7769 */
+    /* ./parser//parser_prod.nit:7918 */
     goto label1;
   }
   label1: while(0);
@@ -41020,7 +41824,7 @@ void 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_prod;
-  fra.me.line = 7773;
+  fra.me.line = 7922;
   fra.me.meth = LOCATE_parser_prod___AQualified___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41029,15 +41833,15 @@ void parser_prod___AQualified___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:7775 */
+  /* ./parser//parser_prod.nit:7924 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7775);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7924);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AQualified___visit_all_1));
-  /* ./parser//parser_prod.nit:7778 */
+  /* ./parser//parser_prod.nit:7927 */
   fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -41053,12 +41857,12 @@ void 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:7779 */
+    /* ./parser//parser_prod.nit:7928 */
     fra.me.REG[0] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7779);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7928);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
@@ -41080,36 +41884,36 @@ void 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:7776 */
+    /* ./parser//parser_prod.nit:7925 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___ADoc___empty_init(val_t p0, int* init_table){
-  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
+  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos283]) return;
+  if (init_table[itpos285]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7784;
+  fra.me.line = 7933;
   fra.me.meth = LOCATE_parser_prod___ADoc___empty_init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
+  init_table[itpos285] = 1;
   return;
 }
 void parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table){
-  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
+  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos284]) return;
+  if (init_table[itpos286]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7786;
+  fra.me.line = 7935;
   fra.me.meth = LOCATE_parser_prod___ADoc___init_adoc;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41117,11 +41921,11 @@ void 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:7790 */
+  /* ./parser//parser_prod.nit:7939 */
   CALL_parser_prod___ADoc___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[1])(fra.me.REG[1], (&(fra.me)), ((fun_t)OC_parser_prod___ADoc___init_adoc_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos284] = 1;
+  init_table[itpos286] = 1;
   return;
 }
   void OC_parser_prod___ADoc___init_adoc_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
@@ -41129,7 +41933,7 @@ void 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:7791 */
+    /* ./parser//parser_prod.nit:7940 */
     fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
     fra.me.file = LOCATE_parser_prod;
     fra.me.line = 0;
@@ -41142,21 +41946,21 @@ void 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:7792 */
+    /* ./parser//parser_prod.nit:7941 */
     REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_TComment, ID_TComment)) /*cast TComment*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7792);
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7941);
     }
-    /* ./parser//parser_prod.nit:7793 */
+    /* ./parser//parser_prod.nit:7942 */
     REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7793);
+      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7942);
     }
     fra.me.REG[1] = ATTR_parser_nodes___ADoc____n_comment(closctx->REG[0]);
     CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    /* ./parser//parser_prod.nit:7794 */
+    /* ./parser//parser_prod.nit:7943 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
     stack_frame_head = fra.me.prev;
     return;
@@ -41171,7 +41975,7 @@ void 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_prod;
-  fra.me.line = 7798;
+  fra.me.line = 7947;
   fra.me.meth = LOCATE_parser_prod___ADoc___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41182,12 +41986,12 @@ void 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:7800 */
+  /* ./parser//parser_prod.nit:7949 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_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_prod, 7800);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7949);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
@@ -41197,13 +42001,13 @@ void parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
     REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
     /* ./../lib/standard//kernel.nit:332 */
     if (UNTAG_Bool(REGB2)) {
-      /* ./parser//parser_prod.nit:7800 */
+      /* ./parser//parser_prod.nit:7949 */
       REGB2 = REGB0;
-      /* ./parser//parser_prod.nit:7801 */
+      /* ./parser//parser_prod.nit:7950 */
       REGB3 = TAG_Bool(ATTR_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_prod, 7801);
+        nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7950);
       }
       fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
       fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
@@ -41220,7 +42024,7 @@ void parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
         }
       }
       if (UNTAG_Bool(REGB3)) {
-        /* ./parser//parser_prod.nit:7802 */
+        /* ./parser//parser_prod.nit:7951 */
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
@@ -41235,37 +42039,37 @@ void 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:7803 */
+          /* ./parser//parser_prod.nit:7952 */
           REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast TComment*/;
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7803);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7952);
           }
-          /* ./parser//parser_prod.nit:7804 */
+          /* ./parser//parser_prod.nit:7953 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7804);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7953);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
           CALL_abstract_collection___Map_____braeq(fra.me.REG[3])(fra.me.REG[3], REGB2, fra.me.REG[2]);
-          /* ./parser//parser_prod.nit:7805 */
+          /* ./parser//parser_prod.nit:7954 */
           REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7805);
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7954);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          /* ./parser//parser_prod.nit:7807 */
+          /* ./parser//parser_prod.nit:7956 */
           REGB3 = TAG_Bool(ATTR_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_prod, 7807);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7956);
           }
           fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
           CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:7809 */
+        /* ./parser//parser_prod.nit:7958 */
         goto label1;
       }
       /* ./../lib/standard//kernel.nit:334 */
@@ -41290,7 +42094,7 @@ void parser_prod___ADoc___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_prod;
-  fra.me.line = 7814;
+  fra.me.line = 7963;
   fra.me.meth = LOCATE_parser_prod___ADoc___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -41298,11 +42102,11 @@ void 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:7816 */
+  /* ./parser//parser_prod.nit:7965 */
   REGB0 = TAG_Bool(ATTR_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_prod, 7816);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7965);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
   CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ADoc___visit_all_1));
@@ -41324,19 +42128,19 @@ void 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:7817 */
+    /* ./parser//parser_prod.nit:7966 */
     CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
     stack_frame_head = fra.me.prev;
     return;
   }
 void parser_prod___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Start].i;
+  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Start].i;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
-  if (init_table[itpos285]) return;
+  if (init_table[itpos287]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7823;
+  fra.me.line = 7972;
   fra.me.meth = LOCATE_parser_prod___Start___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41346,12 +42150,12 @@ void parser_prod___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:7827 */
+  /* ./parser//parser_prod.nit:7976 */
   ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7828 */
+  /* ./parser//parser_prod.nit:7977 */
   ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
+  init_table[itpos287] = 1;
   return;
 }
 void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
@@ -41361,7 +42165,7 @@ void 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_prod;
-  fra.me.line = 7831;
+  fra.me.line = 7980;
   fra.me.meth = LOCATE_parser_prod___Start___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -41372,7 +42176,7 @@ void 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:7833 */
+  /* ./parser//parser_prod.nit:7982 */
   fra.me.REG[3] = ATTR_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)) {
@@ -41387,7 +42191,7 @@ void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser_prod.nit:7834 */
+    /* ./parser//parser_prod.nit:7983 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
     } else {
@@ -41402,24 +42206,24 @@ void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* ./parser//parser_prod.nit:7836 */
+      /* ./parser//parser_prod.nit:7985 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7836);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7985);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7837 */
+      /* ./parser//parser_prod.nit:7986 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModule, ID_AModule)) /*cast AModule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7837);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7986);
       }
-      /* ./parser//parser_prod.nit:7838 */
+      /* ./parser//parser_prod.nit:7987 */
       ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
     }
-    /* ./parser//parser_prod.nit:7840 */
+    /* ./parser//parser_prod.nit:7989 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-    /* ./parser//parser_prod.nit:7841 */
+    /* ./parser//parser_prod.nit:7990 */
     goto label1;
   }
   label1: while(0);
@@ -41433,7 +42237,7 @@ void 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_prod;
-  fra.me.line = 7845;
+  fra.me.line = 7994;
   fra.me.meth = LOCATE_parser_prod___Start___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -41442,7 +42246,7 @@ void parser_prod___Start___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:7847 */
+  /* ./parser//parser_prod.nit:7996 */
   fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
@@ -41458,20 +42262,20 @@ void 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:7848 */
+    /* ./parser//parser_prod.nit:7997 */
     fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModule, ID_AModule)) /*cast AModule*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7848);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7997);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  /* ./parser//parser_prod.nit:7850 */
+  /* ./parser//parser_prod.nit:7999 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser_prod, 7850);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser_prod, 7999);
   }
   fra.me.REG[0] = ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);