ni: makes pointer default super-class of all extern classes
[nit.git] / c_src / parser_prod._sep.c
index 09231b2..42d45ce 100644 (file)
@@ -5,14 +5,14 @@ val_t parser_prod___ANode___parent(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9;
+  fra.me.line = 10;
   fra.me.meth = LOCATE_parser_prod___ANode___parent;
   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:10 */
   fra.me.REG[0] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:9 */
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
@@ -21,7 +21,7 @@ void parser_prod___ANode___parent__eq(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 = 9;
+  fra.me.line = 10;
   fra.me.meth = LOCATE_parser_prod___ANode___parent__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -29,7 +29,7 @@ void parser_prod___ANode___parent__eq(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:9 */
+  /* ./parser//parser_prod.nit:10 */
   ATTR_parser_prod___ANode____parent(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -39,7 +39,7 @@ void parser_prod___ANode___remove_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 = 12;
+  fra.me.line = 13;
   fra.me.meth = LOCATE_parser_prod___ANode___remove_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -47,7 +47,7 @@ void parser_prod___ANode___remove_child(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:15 */
+  /* ./parser//parser_prod.nit:16 */
   CALL_parser_prod___ANode___replace_child(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1], NIT_NULL);
   stack_frame_head = fra.me.prev;
   return;
@@ -57,14 +57,12 @@ void parser_prod___ANode___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 = 18;
+  fra.me.line = 19;
   fra.me.meth = LOCATE_parser_prod___ANode___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:18 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 18);
-  nit_exit(1);
+  /* ./parser//parser_prod.nit:19 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser_prod, 19);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -75,7 +73,7 @@ void parser_prod___ANode___replace_with(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 = 21;
+  fra.me.line = 22;
   fra.me.meth = LOCATE_parser_prod___ANode___replace_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -84,9 +82,9 @@ void parser_prod___ANode___replace_with(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:25 */
   fra.me.REG[2] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:24 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -100,13 +98,11 @@ void parser_prod___ANode___replace_with(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:26 */
     fra.me.REG[2] = ATTR_parser_prod___ANode____parent(fra.me.REG[0]);
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:25 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 25);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 26);
     }
     CALL_parser_prod___ANode___replace_child(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0], fra.me.REG[1]);
   }
@@ -118,49 +114,12 @@ void parser_prod___ANode___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 = 29;
+  fra.me.line = 30;
   fra.me.meth = LOCATE_parser_prod___ANode___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:29 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 29);
-  nit_exit(1);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANode___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 33;
-  fra.me.meth = LOCATE_parser_prod___ANode___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:33 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 33);
-  nit_exit(1);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 41;
-  fra.me.meth = LOCATE_parser_prod___Token___replace_child;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:41 */
+  /* ./parser//parser_prod.nit:30 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser_prod, 30);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -169,7 +128,7 @@ void parser_prod___Token___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 = 39;
+  fra.me.line = 36;
   fra.me.meth = LOCATE_parser_prod___Token___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -177,24 +136,24 @@ void parser_prod___Token___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:39 */
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___Token___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___Token___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 40;
-  fra.me.meth = LOCATE_parser_prod___Token___visit_all_reverse;
+  fra.me.line = 37;
+  fra.me.meth = LOCATE_parser_prod___Token___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:40 */
+  fra.me.REG[2] = p2;
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -204,7 +163,7 @@ void parser_prod___Prod___replace_with(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 = 45;
+  fra.me.line = 41;
   fra.me.meth = LOCATE_parser_prod___Prod___replace_with;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -214,20 +173,19 @@ void parser_prod___Prod___replace_with(val_t p0, val_t p1){
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:41 */
   fra.me.REG[2] = fra.me.REG[0];
   fra.me.REG[3] = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:47 */
+  /* ./parser//parser_prod.nit:43 */
   CALL_SUPER_parser_prod___Prod___replace_with(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+  /* ./parser//parser_prod.nit:44 */
   REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_Prod, ID_Prod)) /*cast Prod*/;
-  /* ./parser//parser_prod.nit:48 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Assert failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 48);
-    nit_exit(1);
+    nit_abort("Assert failed", NULL, LOCATE_parser_prod, 44);
   }
+  /* ./parser//parser_prod.nit:45 */
   fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:49 */
   CALL_parser_nodes___Prod___location__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
@@ -237,14 +195,12 @@ void parser_prod___Visitor___visit(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 = 55;
+  fra.me.line = 51;
   fra.me.meth = LOCATE_parser_prod___Visitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser_prod.nit:55 */
-  fprintf(stderr, "Deferred method called");
-  fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 55);
-  nit_exit(1);
+  /* ./parser//parser_prod.nit:51 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser_prod, 51);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -253,7 +209,7 @@ void parser_prod___Visitor___enter_visit(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 = 59;
+  fra.me.line = 55;
   fra.me.meth = LOCATE_parser_prod___Visitor___enter_visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -262,12 +218,13 @@ void parser_prod___Visitor___enter_visit(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:60 */
   fra.me.REG[2] = ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:65 */
+  /* ./parser//parser_prod.nit:61 */
   ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:66 */
+  /* ./parser//parser_prod.nit:62 */
   CALL_parser_prod___Visitor___visit(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:67 */
+  /* ./parser//parser_prod.nit:63 */
   ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
   return;
@@ -277,14 +234,14 @@ val_t parser_prod___Visitor___current_node(val_t p0){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 70;
+  fra.me.line = 66;
   fra.me.meth = LOCATE_parser_prod___Visitor___current_node;
   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:66 */
   fra.me.REG[0] = ATTR_parser_prod___Visitor____current_node(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:70 */
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
@@ -303,25 +260,50 @@ void parser_prod___Visitor___init(val_t p0, int* init_table){
   init_table[itpos0] = 1;
   return;
 }
-void parser_prod___AModule___n_packagedecl__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AModule___empty_init(val_t p0, int* init_table){
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos1]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 71;
+  fra.me.meth = LOCATE_parser_prod___AModule___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[itpos1] = 1;
+  return;
+}
+void parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].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[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 75;
-  fra.me.meth = LOCATE_parser_prod___AModule___n_packagedecl__eq;
+  fra.me.line = 73;
+  fra.me.meth = LOCATE_parser_prod___AModule___init_amodule;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:77 */
-  ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[1];
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:79 */
+  CALL_parser_prod___AModule___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:80 */
+  ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:81 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:78 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -335,41 +317,117 @@ void parser_prod___AModule___n_packagedecl__eq(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:82 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:79 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 79);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 82);
     }
     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___AModule___init_amodule_1));
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[3])(fra.me.REG[3], (&(fra.me)), ((fun_t)OC_parser_prod___AModule___init_amodule_2));
   stack_frame_head = fra.me.prev;
+  init_table[itpos2] = 1;
   return;
 }
+  void OC_parser_prod___AModule___init_amodule_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:84 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AModule___init_amodule;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:85 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AImport, ID_AImport)) /*cast AImport*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 85);
+    }
+    /* ./parser//parser_prod.nit:86 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 86);
+    }
+    fra.me.REG[1] = ATTR_parser_nodes___AModule____n_imports(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:87 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AModule___init_amodule_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:89 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AModule___init_amodule;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:90 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 90);
+    }
+    /* ./parser//parser_prod.nit:91 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 91);
+    }
+    fra.me.REG[1] = ATTR_parser_nodes___AModule____n_classdefs(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:92 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 108;
+  fra.me.line = 96;
   fra.me.meth = LOCATE_parser_prod___AModule___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:98 */
+  fra.me.REG[3] = ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:110 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -382,8 +440,8 @@ void parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:99 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:111 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -397,235 +455,221 @@ void parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:100 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:112 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 112);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 100);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
-      /* ./parser//parser_prod.nit:113 */
+      /* ./parser//parser_prod.nit:101 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModuledecl, ID_AModuledecl)) /*cast AModuledecl*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 113);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 101);
       }
-      /* ./parser//parser_prod.nit:114 */
-      ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:102 */
+      ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:116 */
-      ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = NIT_NULL;
+      /* ./parser//parser_prod.nit:104 */
+      ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:118 */
+    /* ./parser//parser_prod.nit:106 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:108 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:120 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 120);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 108);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:121 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 121);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:108 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:109 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 109);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:122 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:110 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AImport, ID_AImport)) /*cast AImport*/;
-          /* ./parser//parser_prod.nit:123 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:111 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AImport, ID_AImport)) /*cast AImport*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 123);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 111);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:124 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:112 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 124);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 112);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:125 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 125);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AModule____n_imports(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:113 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 113);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:127 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:115 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 127);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 115);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          fra.me.REG[3] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:129 */
+        /* ./parser//parser_prod.nit:117 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:120 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:132 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:120 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 132);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 120);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:133 */
-      if (UNTAG_Bool(REGB1)) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:120 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:121 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 133);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 121);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
+      fra.me.REG[3] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:134 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:122 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
-          /* ./parser//parser_prod.nit:135 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:123 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 135);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 123);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:136 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:124 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 136);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 124);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:137 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 137);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AModule____n_classdefs(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:125 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 125);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:139 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:127 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 139);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 127);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          fra.me.REG[3] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:141 */
+        /* ./parser//parser_prod.nit:129 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:132 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
   label1: while(0);
@@ -633,107 +677,14 @@ void parser_prod___AModule___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AModule___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 146;
-  fra.me.meth = LOCATE_parser_prod___AModule___visit_all;
-  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] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:148 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
-    /* ./parser//parser_prod.nit:149 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 149);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:151 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 151);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:152 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:151 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:154 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 154);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:155 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:154 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AModule___visit_all_reverse(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 = 159;
-  fra.me.meth = LOCATE_parser_prod___AModule___visit_all_reverse;
+  fra.me.line = 134;
+  fra.me.meth = LOCATE_parser_prod___AModule___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -741,9 +692,9 @@ void parser_prod___AModule___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:136 */
+  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:161 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -757,140 +708,118 @@ void parser_prod___AModule___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APackagedecl, ID_APackagedecl)) /*cast APackagedecl*/;
-    /* ./parser//parser_prod.nit:162 */
+    /* ./parser//parser_prod.nit:137 */
+    fra.me.REG[2] = ATTR_parser_nodes___AModule____n_moduledecl(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModuledecl, ID_AModuledecl)) /*cast AModuledecl*/;
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 162);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 137);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:139 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:165 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 165);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_imports", LOCATE_parser_prod, 139);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:166 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:166 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:167 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 167);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:168 */
-    } else {
-      /* ./parser//parser_prod.nit:166 */
-      goto label1;
-    }
-  }
-  label1: while(0);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AModule___visit_all_1));
+  /* ./parser//parser_prod.nit:142 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:172 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 172);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:173 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:173 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:174 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 174);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:175 */
-    } else {
-      /* ./parser//parser_prod.nit:173 */
-      goto label2;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_classdefs", LOCATE_parser_prod, 142);
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AModule___empty_init(val_t p0, int* init_table){
-  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].i;
+  fra.me.REG[0] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AModule___visit_all_2));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AModule___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AModule___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:140 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AModule___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AModule___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:143 */
+    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___AModuledecl___empty_init(val_t p0, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModuledecl].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos1]) return;
+  if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 83;
-  fra.me.meth = LOCATE_parser_prod___AModule___empty_init;
+  fra.me.line = 148;
+  fra.me.meth = LOCATE_parser_prod___AModuledecl___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:83 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos1] = 1;
+  init_table[itpos3] = 1;
   return;
 }
-void parser_prod___AModule___init_amodule(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModule].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser_prod___AModuledecl___init_amoduledecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AModuledecl].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[itpos2]) return;
+  if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 85;
-  fra.me.meth = LOCATE_parser_prod___AModule___init_amodule;
+  fra.me.line = 150;
+  fra.me.meth = LOCATE_parser_prod___AModuledecl___init_amoduledecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:91 */
-  CALL_parser_prod___AModule___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:92 */
-  ATTR_parser_nodes___AModule____n_packagedecl(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:156 */
+  CALL_parser_prod___AModuledecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:157 */
+  ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:158 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:93 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -904,178 +833,52 @@ void parser_prod___AModule___init_amodule(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:159 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:94 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 94);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 159);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:96 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AImport, ID_AImport)) /*cast AImport*/;
-      /* ./parser//parser_prod.nit:97 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 97);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:98 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_imports");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 98);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AModule____n_imports(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-      /* ./parser//parser_prod.nit:99 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:96 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:161 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 161);
   }
-  label1: while(0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:101 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClassdef, ID_AClassdef)) /*cast AClassdef*/;
-      /* ./parser//parser_prod.nit:102 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 102);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:103 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_classdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 103);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___AModule____n_classdefs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:104 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:101 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:162 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 162);
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos2] = 1;
-  return;
-}
-void parser_prod___APackagedecl___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 181;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:183 */
-  ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:184 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:163 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 163);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AModuledecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:164 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:185 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 185);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 164);
   }
+  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[itpos4] = 1;
   return;
 }
-void parser_prod___APackagedecl___n_kwpackage__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 188;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_kwpackage__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:190 */
-  ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:191 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APackagedecl___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 193;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:195 */
-  ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:196 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AModuledecl___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 218;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___replace_child;
+  fra.me.line = 167;
+  fra.me.meth = LOCATE_parser_prod___AModuledecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -1085,9 +888,9 @@ void parser_prod___APackagedecl___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;
-  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:169 */
+  fra.me.REG[3] = ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:220 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -1100,8 +903,8 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:170 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:221 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1115,40 +918,34 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:171 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:222 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 222);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 171);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:172 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:223 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 223);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 172);
       }
-      /* ./parser//parser_prod.nit:224 */
-      ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:173 */
+      ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:226 */
-      ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = NIT_NULL;
+      /* ./parser//parser_prod.nit:175 */
+      ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:228 */
+    /* ./parser//parser_prod.nit:177 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:230 */
+  /* ./parser//parser_prod.nit:179 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 230);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser_prod, 179);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1156,8 +953,8 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:180 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:231 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1171,42 +968,34 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:181 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:232 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 232);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 181);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwpackage, ID_TKwpackage)) /*cast TKwpackage*/;
-      /* ./parser//parser_prod.nit:233 */
+      /* ./parser//parser_prod.nit:182 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmodule, ID_TKwmodule)) /*cast TKwmodule*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 233);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 182);
       }
-      /* ./parser//parser_prod.nit:234 */
-      ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:183 */
+      ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:236 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 236);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:185 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 185);
     }
-    /* ./parser//parser_prod.nit:238 */
+    /* ./parser//parser_prod.nit:187 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:240 */
+  /* ./parser//parser_prod.nit:189 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModuledecl____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 240);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 189);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser_nodes___AModuledecl____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -1214,8 +1003,8 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:190 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:241 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1229,112 +1018,40 @@ void parser_prod___APackagedecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:191 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:242 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 242);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 191);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:192 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:243 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 243);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 192);
       }
-      /* ./parser//parser_prod.nit:244 */
-      ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:193 */
+      ATTR_parser_nodes___AModuledecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:246 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 246);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:195 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 195);
     }
-    /* ./parser//parser_prod.nit:248 */
+    /* ./parser//parser_prod.nit:197 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APackagedecl___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 = 252;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___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;
-  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:254 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____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*/;
-    /* ./parser//parser_prod.nit:255 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 255);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 257);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:258 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 258);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___APackagedecl____n_id(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___APackagedecl___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AModuledecl___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 = 261;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___visit_all_reverse;
+  fra.me.line = 201;
+  fra.me.meth = LOCATE_parser_prod___AModuledecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -1342,9 +1059,9 @@ void parser_prod___APackagedecl___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:203 */
+  fra.me.REG[2] = ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:263 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1358,69 +1075,61 @@ void parser_prod___APackagedecl___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:204 */
+    fra.me.REG[2] = ATTR_parser_nodes___AModuledecl____n_doc(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-    /* ./parser//parser_prod.nit:264 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 264);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 204);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:266 */
+  /* ./parser//parser_prod.nit:206 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwpackage");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 266);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmodule", LOCATE_parser_prod, 206);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]);
+  fra.me.REG[2] = ATTR_parser_nodes___AModuledecl____n_kwmodule(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:267 */
+  /* ./parser//parser_prod.nit:207 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AModuledecl____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 267);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 207);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser_nodes___AModuledecl____n_id(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___APackagedecl___empty_init(val_t p0, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APackagedecl].i;
+void parser_prod___AStdImport___empty_init(val_t p0, int* init_table){
+  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos3]) return;
+  if (init_table[itpos5]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 199;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___empty_init;
+  fra.me.line = 211;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___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:199 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos3] = 1;
+  init_table[itpos5] = 1;
   return;
 }
-void parser_prod___APackagedecl___init_apackagedecl(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APackagedecl].i;
+void parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].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[itpos4]) return;
+  if (init_table[itpos6]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 201;
-  fra.me.meth = LOCATE_parser_prod___APackagedecl___init_apackagedecl;
+  fra.me.line = 213;
+  fra.me.meth = LOCATE_parser_prod___AStdImport___init_astdimport;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -1431,130 +1140,49 @@ void parser_prod___APackagedecl___init_apackagedecl(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:207 */
-  CALL_parser_prod___APackagedecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:208 */
-  ATTR_parser_nodes___APackagedecl____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:209 */
+  /* ./parser//parser_prod.nit:219 */
+  CALL_parser_prod___AStdImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:220 */
+  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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 220);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:221 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:210 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 210);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 221);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:222 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:212 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 212);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 222);
   }
-  ATTR_parser_nodes___APackagedecl____n_kwpackage(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:223 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:213 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 213);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 223);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:224 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:214 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 214);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 224);
   }
-  ATTR_parser_nodes___APackagedecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:225 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:215 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 215);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 225);
   }
   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[itpos4] = 1;
-  return;
-}
-void parser_prod___AStdImport___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 271;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:273 */
-  ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:274 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdImport___n_kwimport__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 276;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___n_kwimport__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:278 */
-  ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:279 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdImport___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 281;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:283 */
-  ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:284 */
-  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[itpos6] = 1;
   return;
 }
 void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
@@ -1564,7 +1192,7 @@ void parser_prod___AStdImport___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 = 304;
+  fra.me.line = 228;
   fra.me.meth = LOCATE_parser_prod___AStdImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -1575,13 +1203,11 @@ void parser_prod___AStdImport___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:230 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:306 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 306);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 230);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1591,8 +1217,8 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:231 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:307 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1606,40 +1232,32 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:232 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:308 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 308);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 232);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:233 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:309 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 309);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 233);
       }
-      /* ./parser//parser_prod.nit:310 */
+      /* ./parser//parser_prod.nit:234 */
       ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:312 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 312);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:236 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 236);
     }
-    /* ./parser//parser_prod.nit:314 */
+    /* ./parser//parser_prod.nit:238 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:240 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:316 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 316);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 240);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1649,8 +1267,8 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:241 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:317 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1664,40 +1282,32 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:242 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:318 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 318);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 242);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:243 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
-      /* ./parser//parser_prod.nit:319 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 319);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 243);
       }
-      /* ./parser//parser_prod.nit:320 */
+      /* ./parser//parser_prod.nit:244 */
       ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:322 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 322);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:246 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 246);
     }
-    /* ./parser//parser_prod.nit:324 */
+    /* ./parser//parser_prod.nit:248 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:250 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:326 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 326);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 250);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -1707,8 +1317,8 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:251 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:327 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -1722,31 +1332,25 @@ void parser_prod___AStdImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:252 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:328 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 328);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 252);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:253 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:329 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 329);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 253);
       }
-      /* ./parser//parser_prod.nit:330 */
+      /* ./parser//parser_prod.nit:254 */
       ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:332 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 332);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:256 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 256);
     }
-    /* ./parser//parser_prod.nit:334 */
+    /* ./parser//parser_prod.nit:258 */
     goto label1;
   }
   label1: while(0);
@@ -1759,7 +1363,7 @@ void parser_prod___AStdImport___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 338;
+  fra.me.line = 262;
   fra.me.meth = LOCATE_parser_prod___AStdImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -1768,240 +1372,113 @@ void parser_prod___AStdImport___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:264 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:340 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 340);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 264);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdImport____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:265 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:341 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 341);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 265);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdImport____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:266 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:342 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 342);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 266);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AStdImport____n_id(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___AStdImport___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___ANoImport___empty_init(val_t p0, int* init_table){
+  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos7]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 270;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___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[itpos7] = 1;
+  return;
+}
+void parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos8]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 345;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___visit_all_reverse;
+  fra.me.line = 272;
+  fra.me.meth = LOCATE_parser_prod___ANoImport___init_anoimport;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:347 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 347);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:348 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 348);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:349 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 349);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AStdImport____n_id(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___AStdImport___empty_init(val_t p0, int* init_table){
-  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos5]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 287;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___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:287 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos5] = 1;
-  return;
-}
-void parser_prod___AStdImport___init_astdimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdImport].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos6]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 289;
-  fra.me.meth = LOCATE_parser_prod___AStdImport___init_astdimport;
-  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[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:295 */
-  CALL_parser_prod___AStdImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:278 */
+  CALL_parser_prod___ANoImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:279 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:296 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 296);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 279);
   }
-  ATTR_parser_nodes___AStdImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:280 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:297 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 297);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 280);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:281 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:298 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 298);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 281);
   }
-  ATTR_parser_nodes___AStdImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:282 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:299 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 299);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 282);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:283 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:300 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 300);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 283);
   }
-  ATTR_parser_nodes___AStdImport____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:284 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:301 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 301);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 284);
   }
   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[itpos6] = 1;
-  return;
-}
-void parser_prod___ANoImport___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 353;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:355 */
-  ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:356 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANoImport___n_kwimport__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 358;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___n_kwimport__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:360 */
-  ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:361 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANoImport___n_kwend__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 363;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___n_kwend__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:365 */
-  ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:366 */
-  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[itpos8] = 1;
   return;
 }
 void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
@@ -2011,7 +1488,7 @@ void parser_prod___ANoImport___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 = 386;
+  fra.me.line = 287;
   fra.me.meth = LOCATE_parser_prod___ANoImport___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2022,13 +1499,11 @@ void parser_prod___ANoImport___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:289 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:388 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 388);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 289);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2038,8 +1513,8 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:290 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:389 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2053,40 +1528,32 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:291 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:390 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 390);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 291);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:292 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:391 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 391);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 292);
       }
-      /* ./parser//parser_prod.nit:392 */
+      /* ./parser//parser_prod.nit:293 */
       ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:394 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 394);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:295 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 295);
     }
-    /* ./parser//parser_prod.nit:396 */
+    /* ./parser//parser_prod.nit:297 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:299 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:398 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 398);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 299);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2096,8 +1563,8 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:300 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:399 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2111,40 +1578,32 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:301 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:400 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 400);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 301);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:302 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwimport, ID_TKwimport)) /*cast TKwimport*/;
-      /* ./parser//parser_prod.nit:401 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 401);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 302);
       }
-      /* ./parser//parser_prod.nit:402 */
+      /* ./parser//parser_prod.nit:303 */
       ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:404 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 404);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:305 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 305);
     }
-    /* ./parser//parser_prod.nit:406 */
+    /* ./parser//parser_prod.nit:307 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:309 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:408 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 408);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser_prod, 309);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2154,8 +1613,8 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:310 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:409 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2169,31 +1628,25 @@ void parser_prod___ANoImport___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:311 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:410 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 410);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 311);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:312 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwend, ID_TKwend)) /*cast TKwend*/;
-      /* ./parser//parser_prod.nit:411 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 411);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 312);
       }
-      /* ./parser//parser_prod.nit:412 */
+      /* ./parser//parser_prod.nit:313 */
       ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:414 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 414);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:315 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 315);
     }
-    /* ./parser//parser_prod.nit:416 */
+    /* ./parser//parser_prod.nit:317 */
     goto label1;
   }
   label1: while(0);
@@ -2206,7 +1659,7 @@ void parser_prod___ANoImport___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 = 420;
+  fra.me.line = 321;
   fra.me.meth = LOCATE_parser_prod___ANoImport___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2215,180 +1668,67 @@ void parser_prod___ANoImport___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:323 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:422 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 422);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:423 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 423);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:424 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 424);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___ANoImport____n_kwend(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___ANoImport___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 427;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:429 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 429);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 323);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ANoImport____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:324 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:430 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwimport");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 430);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 324);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ANoImport____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:325 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:431 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwend");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 431);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwend", LOCATE_parser_prod, 325);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ANoImport____n_kwend(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___ANoImport___empty_init(val_t p0, int* init_table){
-  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
+void parser_prod___APublicVisibility___empty_init(val_t p0, int* init_table){
+  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos7]) return;
+  if (init_table[itpos9]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 369;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___empty_init;
+  fra.me.line = 329;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___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:369 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos7] = 1;
+  init_table[itpos9] = 1;
   return;
 }
-void parser_prod___ANoImport___init_anoimport(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANoImport].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
+void parser_prod___APublicVisibility___init_apublicvisibility(val_t p0, int* init_table){
+  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos8]) return;
+  if (init_table[itpos10]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 371;
-  fra.me.meth = LOCATE_parser_prod___ANoImport___init_anoimport;
+  fra.me.line = 331;
+  fra.me.meth = LOCATE_parser_prod___APublicVisibility___init_apublicvisibility;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 1;
   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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:377 */
-  CALL_parser_prod___ANoImport___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:378 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 378);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ANoImport____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:379 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 379);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:380 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 380);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ANoImport____n_kwimport(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:381 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 381);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:382 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 382);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ANoImport____n_kwend(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:383 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 383);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:333 */
+  CALL_parser_prod___APublicVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos8] = 1;
+  init_table[itpos10] = 1;
   return;
 }
 void parser_prod___APublicVisibility___replace_child(val_t p0, val_t p1, val_t p2){
@@ -2396,7 +1736,7 @@ void parser_prod___APublicVisibility___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 = 443;
+  fra.me.line = 336;
   fra.me.meth = LOCATE_parser_prod___APublicVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -2406,7 +1746,6 @@ void parser_prod___APublicVisibility___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:443 */
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -2415,7 +1754,7 @@ void parser_prod___APublicVisibility___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 = 447;
+  fra.me.line = 340;
   fra.me.meth = LOCATE_parser_prod___APublicVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2423,82 +1762,59 @@ void parser_prod___APublicVisibility___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:447 */
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APublicVisibility___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 451;
-  fra.me.meth = LOCATE_parser_prod___APublicVisibility___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:451 */
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APublicVisibility___empty_init(val_t p0, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos9]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 436;
-  fra.me.meth = LOCATE_parser_prod___APublicVisibility___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:436 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
   return;
 }
-void parser_prod___APublicVisibility___init_apublicvisibility(val_t p0, int* init_table){
-  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APublicVisibility].i;
+void parser_prod___APrivateVisibility___empty_init(val_t p0, int* init_table){
+  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos10]) return;
+  if (init_table[itpos11]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 438;
-  fra.me.meth = LOCATE_parser_prod___APublicVisibility___init_apublicvisibility;
+  fra.me.line = 345;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___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:440 */
-  CALL_parser_prod___APublicVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos10] = 1;
+  init_table[itpos11] = 1;
   return;
 }
-void parser_prod___APrivateVisibility___n_kwprivate__eq(val_t p0, val_t p1){
+void parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p0, val_t p1, int* init_table){
+  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
+  if (init_table[itpos12]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 456;
-  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___n_kwprivate__eq;
+  fra.me.line = 347;
+  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___init_aprivatevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:458 */
+  /* ./parser//parser_prod.nit:351 */
+  CALL_parser_prod___APrivateVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:352 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 352);
+  }
   ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:459 */
+  /* ./parser//parser_prod.nit:353 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 353);
+  }
   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[itpos12] = 1;
   return;
 }
 void parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p1, val_t p2){
@@ -2508,7 +1824,7 @@ void parser_prod___APrivateVisibility___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 = 473;
+  fra.me.line = 356;
   fra.me.meth = LOCATE_parser_prod___APrivateVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2519,13 +1835,11 @@ void parser_prod___APrivateVisibility___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:358 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:475 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 475);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser_prod, 358);
   }
   fra.me.REG[3] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2535,8 +1849,8 @@ void parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:359 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:476 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2550,31 +1864,25 @@ void parser_prod___APrivateVisibility___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:360 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:477 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 477);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 360);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:361 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwprivate, ID_TKwprivate)) /*cast TKwprivate*/;
-      /* ./parser//parser_prod.nit:478 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 478);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 361);
       }
-      /* ./parser//parser_prod.nit:479 */
+      /* ./parser//parser_prod.nit:362 */
       ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:481 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 481);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:364 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 364);
     }
-    /* ./parser//parser_prod.nit:483 */
+    /* ./parser//parser_prod.nit:366 */
     goto label1;
   }
   label1: while(0);
@@ -2587,7 +1895,7 @@ void parser_prod___APrivateVisibility___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 = 487;
+  fra.me.line = 370;
   fra.me.meth = LOCATE_parser_prod___APrivateVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2595,121 +1903,67 @@ void parser_prod___APrivateVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:372 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:489 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 489);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(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___APrivateVisibility___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 492;
-  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:494 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprivate");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 494);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwprivate", LOCATE_parser_prod, 372);
   }
   fra.me.REG[0] = ATTR_parser_nodes___APrivateVisibility____n_kwprivate(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___APrivateVisibility___empty_init(val_t p0, int* init_table){
-  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
+void parser_prod___AProtectedVisibility___empty_init(val_t p0, int* init_table){
+  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos11]) return;
+  if (init_table[itpos13]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 462;
-  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___empty_init;
+  fra.me.line = 376;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___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:462 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos11] = 1;
+  init_table[itpos13] = 1;
   return;
 }
-void parser_prod___APrivateVisibility___init_aprivatevisibility(val_t p0, val_t p1, int* init_table){
-  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APrivateVisibility].i;
+void parser_prod___AProtectedVisibility___init_aprotectedvisibility(val_t p0, val_t p1, int* init_table){
+  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos12]) return;
+  if (init_table[itpos14]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 464;
-  fra.me.meth = LOCATE_parser_prod___APrivateVisibility___init_aprivatevisibility;
+  fra.me.line = 378;
+  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___init_aprotectedvisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:468 */
-  CALL_parser_prod___APrivateVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:382 */
+  CALL_parser_prod___AProtectedVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:383 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:469 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 469);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 383);
   }
-  ATTR_parser_nodes___APrivateVisibility____n_kwprivate(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:384 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:470 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 470);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 384);
   }
   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[itpos12] = 1;
-  return;
-}
-void parser_prod___AProtectedVisibility___n_kwprotected__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 498;
-  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___n_kwprotected__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:500 */
-  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:501 */
-  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[itpos14] = 1;
   return;
 }
 void parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t p1, val_t p2){
@@ -2719,7 +1973,7 @@ void parser_prod___AProtectedVisibility___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 = 515;
+  fra.me.line = 387;
   fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2730,13 +1984,11 @@ void parser_prod___AProtectedVisibility___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:389 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:517 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 517);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser_prod, 389);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2746,8 +1998,8 @@ void parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:390 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:518 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2761,31 +2013,25 @@ void parser_prod___AProtectedVisibility___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:391 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:519 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 519);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 391);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:392 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwprotected, ID_TKwprotected)) /*cast TKwprotected*/;
-      /* ./parser//parser_prod.nit:520 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 520);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 392);
       }
-      /* ./parser//parser_prod.nit:521 */
+      /* ./parser//parser_prod.nit:393 */
       ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:523 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 523);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:395 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 395);
     }
-    /* ./parser//parser_prod.nit:525 */
+    /* ./parser//parser_prod.nit:397 */
     goto label1;
   }
   label1: while(0);
@@ -2798,7 +2044,7 @@ void parser_prod___AProtectedVisibility___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 = 529;
+  fra.me.line = 401;
   fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -2806,121 +2052,67 @@ void parser_prod___AProtectedVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:403 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:531 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 531);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(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___AProtectedVisibility___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 534;
-  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:536 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwprotected");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 536);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwprotected", LOCATE_parser_prod, 403);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(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___AProtectedVisibility___empty_init(val_t p0, int* init_table){
-  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
+void parser_prod___AIntrudeVisibility___empty_init(val_t p0, int* init_table){
+  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos13]) return;
+  if (init_table[itpos15]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 504;
-  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___empty_init;
+  fra.me.line = 407;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___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:504 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos13] = 1;
+  init_table[itpos15] = 1;
   return;
 }
-void parser_prod___AProtectedVisibility___init_aprotectedvisibility(val_t p0, val_t p1, int* init_table){
-  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AProtectedVisibility].i;
+void parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p0, val_t p1, int* init_table){
+  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos14]) return;
+  if (init_table[itpos16]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 506;
-  fra.me.meth = LOCATE_parser_prod___AProtectedVisibility___init_aprotectedvisibility;
+  fra.me.line = 409;
+  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___init_aintrudevisibility;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:510 */
-  CALL_parser_prod___AProtectedVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:413 */
+  CALL_parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:414 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:511 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 511);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 414);
   }
-  ATTR_parser_nodes___AProtectedVisibility____n_kwprotected(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:415 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:512 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 512);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 415);
   }
   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[itpos14] = 1;
-  return;
-}
-void parser_prod___AIntrudeVisibility___n_kwintrude__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 540;
-  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___n_kwintrude__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:542 */
-  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:543 */
-  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[itpos16] = 1;
   return;
 }
 void parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p1, val_t p2){
@@ -2930,7 +2122,7 @@ void parser_prod___AIntrudeVisibility___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 = 557;
+  fra.me.line = 418;
   fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -2941,13 +2133,11 @@ void parser_prod___AIntrudeVisibility___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:420 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:559 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 559);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser_prod, 420);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -2957,8 +2147,8 @@ void parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:421 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:560 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -2972,31 +2162,25 @@ void parser_prod___AIntrudeVisibility___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:422 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:561 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 561);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 422);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:423 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwintrude, ID_TKwintrude)) /*cast TKwintrude*/;
-      /* ./parser//parser_prod.nit:562 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 562);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 423);
       }
-      /* ./parser//parser_prod.nit:563 */
+      /* ./parser//parser_prod.nit:424 */
       ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:565 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 565);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:426 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 426);
     }
-    /* ./parser//parser_prod.nit:567 */
+    /* ./parser//parser_prod.nit:428 */
     goto label1;
   }
   label1: while(0);
@@ -3009,7 +2193,7 @@ void parser_prod___AIntrudeVisibility___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 = 571;
+  fra.me.line = 432;
   fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -3017,122 +2201,71 @@ void parser_prod___AIntrudeVisibility___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:434 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 573);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(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___AIntrudeVisibility___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 576;
-  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:578 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwintrude");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 578);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwintrude", LOCATE_parser_prod, 434);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(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___AIntrudeVisibility___empty_init(val_t p0, int* init_table){
-  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
+void parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table){
+  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos15]) return;
+  if (init_table[itpos17]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 546;
-  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___empty_init;
+  fra.me.line = 438;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___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:546 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos15] = 1;
-  return;
-}
-void parser_prod___AIntrudeVisibility___init_aintrudevisibility(val_t p0, val_t p1, int* init_table){
-  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntrudeVisibility].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos16]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 548;
-  fra.me.meth = LOCATE_parser_prod___AIntrudeVisibility___init_aintrudevisibility;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:552 */
-  CALL_parser_prod___AIntrudeVisibility___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:553 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 553);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AIntrudeVisibility____n_kwintrude(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:554 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 554);
-    nit_exit(1);
-  }
-  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[itpos16] = 1;
+  init_table[itpos17] = 1;
   return;
 }
-void parser_prod___AStdClassdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].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[itpos18]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 582;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_doc__eq;
+  fra.me.line = 440;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:584 */
+  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:451 */
+  CALL_parser_prod___AStdClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:452 */
   ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:453 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:585 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -3146,169 +2279,229 @@ void parser_prod___AStdClassdef___n_doc__eq(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:454 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:586 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 586);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 454);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 589;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:591 */
-  ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:592 */
+  /* ./parser//parser_prod.nit:456 */
+  ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:457 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:593 */
+    /* ./parser//parser_prod.nit:458 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 593);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 458);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 596;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:598 */
-  ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:599 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___n_classkind__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 601;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_classkind__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:603 */
-  ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:604 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 606;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:608 */
-  ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:609 */
+  /* ./parser//parser_prod.nit:460 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 460);
+  }
+  ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:461 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 461);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:462 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 462);
+  }
+  ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:463 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 463);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:464 */
+  ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:465 */
+  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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:610 */
+    /* ./parser//parser_prod.nit:466 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 610);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 466);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[6])(fra.me.REG[6], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___init_astdclassdef_1));
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[7])(fra.me.REG[7], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___init_astdclassdef_2));
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[8])(fra.me.REG[8], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___init_astdclassdef_3));
   stack_frame_head = fra.me.prev;
+  init_table[itpos18] = 1;
   return;
 }
+  void OC_parser_prod___AStdClassdef___init_astdclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:468 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:469 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 469);
+    }
+    /* ./parser//parser_prod.nit:470 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 470);
+    }
+    fra.me.REG[1] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:471 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AStdClassdef___init_astdclassdef_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:473 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:474 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 474);
+    }
+    /* ./parser//parser_prod.nit:475 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 475);
+    }
+    fra.me.REG[1] = ATTR_parser_nodes___AStdClassdef____n_superclasses(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:476 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AStdClassdef___init_astdclassdef_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:478 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:479 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 479);
+    }
+    /* ./parser//parser_prod.nit:480 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 480);
+    }
+    fra.me.REG[1] = ATTR_parser_nodes___AStdClassdef____n_propdefs(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:481 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 661;
+  fra.me.line = 485;
   fra.me.meth = LOCATE_parser_prod___AStdClassdef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:487 */
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:663 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -3321,8 +2514,8 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:488 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:664 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -3336,34 +2529,30 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:489 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:665 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 665);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 489);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:490 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:666 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 666);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 490);
       }
-      /* ./parser//parser_prod.nit:667 */
+      /* ./parser//parser_prod.nit:491 */
       ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:669 */
+      /* ./parser//parser_prod.nit:493 */
       ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:671 */
+    /* ./parser//parser_prod.nit:495 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:497 */
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:673 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -3376,8 +2565,8 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:498 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:674 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -3391,38 +2580,32 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:499 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:675 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 675);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 499);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:500 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:676 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 676);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 500);
       }
-      /* ./parser//parser_prod.nit:677 */
+      /* ./parser//parser_prod.nit:501 */
       ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:679 */
+      /* ./parser//parser_prod.nit:503 */
       ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:681 */
+    /* ./parser//parser_prod.nit:505 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:507 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:683 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 683);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 507);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3432,8 +2615,8 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:508 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:684 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -3447,40 +2630,32 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:509 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:685 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 685);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 509);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:510 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:686 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 686);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 510);
       }
-      /* ./parser//parser_prod.nit:687 */
+      /* ./parser//parser_prod.nit:511 */
       ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:689 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 689);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:513 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 513);
     }
-    /* ./parser//parser_prod.nit:691 */
+    /* ./parser//parser_prod.nit:515 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:517 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:693 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 693);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser_prod, 517);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -3490,8 +2665,8 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:518 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:694 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -3505,36 +2680,30 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:519 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:695 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 695);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 519);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:520 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClasskind, ID_AClasskind)) /*cast AClasskind*/;
-      /* ./parser//parser_prod.nit:696 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 696);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 520);
       }
-      /* ./parser//parser_prod.nit:697 */
+      /* ./parser//parser_prod.nit:521 */
       ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:699 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 699);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:523 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 523);
     }
-    /* ./parser//parser_prod.nit:701 */
+    /* ./parser//parser_prod.nit:525 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:527 */
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:703 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -3547,8 +2716,8 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:528 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:704 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -3562,338 +2731,319 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:529 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:705 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 705);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 529);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:530 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      /* ./parser//parser_prod.nit:706 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 706);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 530);
       }
-      /* ./parser//parser_prod.nit:707 */
+      /* ./parser//parser_prod.nit:531 */
       ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:709 */
+      /* ./parser//parser_prod.nit:533 */
       ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:711 */
+    /* ./parser//parser_prod.nit:535 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:537 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:713 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 713);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 537);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:714 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 714);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:537 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:538 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 538);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:715 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:539 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
-          /* ./parser//parser_prod.nit:716 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:540 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 716);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 540);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:717 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:541 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 717);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 541);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:718 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 718);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(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:542 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 542);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:720 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:544 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 720);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 544);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:722 */
+        /* ./parser//parser_prod.nit:546 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:713 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:725 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:549 */
+  REGB0 = TAG_Int(0);
+  REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 725);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 549);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:726 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 726);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:549 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:550 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 550);
+      }
+      fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:727 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:551 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
-          /* ./parser//parser_prod.nit:728 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:552 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 728);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 552);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:729 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:553 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 729);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 553);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:730 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 730);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_superclasses(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:554 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 554);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:732 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:556 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 732);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 556);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:734 */
+        /* ./parser//parser_prod.nit:558 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:725 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
+  /* ./parser//parser_prod.nit:561 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:737 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 737);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 561);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:738 */
-      if (UNTAG_Bool(REGB0)) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:561 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:562 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 738);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 562);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
+      fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:739 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:563 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-          /* ./parser//parser_prod.nit:740 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:564 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 740);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 564);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:741 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:565 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 741);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 565);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:742 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 742);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_propdefs(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:566 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 566);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:744 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:568 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 744);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 568);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          fra.me.REG[3] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:746 */
+        /* ./parser//parser_prod.nit:570 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:737 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label4;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label4: while(0);
   label1: while(0);
@@ -3901,204 +3051,14 @@ void parser_prod___AStdClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AStdClassdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 751;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
-  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] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:753 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-    /* ./parser//parser_prod.nit:754 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 754);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:756 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-    /* ./parser//parser_prod.nit:757 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 757);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:759 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 759);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:760 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 760);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:761 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-    /* ./parser//parser_prod.nit:762 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 762);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:764 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 764);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:765 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:764 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:767 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 767);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:768 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:767 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label2: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:770 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 770);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:771 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:770 */
-      goto label3;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label3: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___visit_all_reverse(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 = 775;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all_reverse;
+  fra.me.line = 575;
+  fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -4106,9 +3066,9 @@ void parser_prod___AStdClassdef___visit_all_reverse(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:577 */
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:777 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -4122,20 +3082,18 @@ void parser_prod___AStdClassdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:578 */
     fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-    /* ./parser//parser_prod.nit:778 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 778);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 578);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:580 */
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:780 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -4149,40 +3107,34 @@ void parser_prod___AStdClassdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:581 */
     fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-    /* ./parser//parser_prod.nit:781 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 781);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 581);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:583 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:783 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 783);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 583);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____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:584 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:784 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_classkind");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 784);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_classkind", LOCATE_parser_prod, 584);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_classkind(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:585 */
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:785 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -4196,518 +3148,295 @@ void parser_prod___AStdClassdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:586 */
     fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-    /* ./parser//parser_prod.nit:786 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 786);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 586);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:588 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:789 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 789);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_formaldefs", LOCATE_parser_prod, 588);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:790 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:790 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:791 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 791);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:792 */
-    } else {
-      /* ./parser//parser_prod.nit:790 */
-      goto label1;
-    }
-  }
-  label1: while(0);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___visit_all_1));
+  /* ./parser//parser_prod.nit:591 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:796 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 796);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_superclasses", LOCATE_parser_prod, 591);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:797 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:797 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:798 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 798);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:799 */
-    } else {
-      /* ./parser//parser_prod.nit:797 */
-      goto label2;
-    }
-  }
-  label2: while(0);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[2])(fra.me.REG[2], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___visit_all_2));
+  /* ./parser//parser_prod.nit:594 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:803 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 803);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 594);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:804 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:804 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:805 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 805);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:806 */
-    } else {
-      /* ./parser//parser_prod.nit:804 */
-      goto label3;
-    }
+  fra.me.REG[0] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AStdClassdef___visit_all_3));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AStdClassdef___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:589 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AStdClassdef___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:592 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AStdClassdef___visit_all_3(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AStdClassdef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:595 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label3: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStdClassdef___empty_init(val_t p0, int* init_table){
-  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].i;
+void parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table){
+  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos17]) return;
+  if (init_table[itpos19]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 614;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___empty_init;
+  fra.me.line = 600;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___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:614 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos17] = 1;
+  init_table[itpos19] = 1;
   return;
 }
-void parser_prod___AStdClassdef___init_astdclassdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
-  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStdClassdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1, int* init_table){
+  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos18]) return;
+  if (init_table[itpos20]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 616;
-  fra.me.meth = LOCATE_parser_prod___AStdClassdef___init_astdclassdef;
+  fra.me.line = 602;
+  fra.me.meth = LOCATE_parser_prod___ATopClassdef___init_atopclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 2;
   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:627 */
-  CALL_parser_prod___AStdClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:628 */
-  ATTR_parser_nodes___AStdClassdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:629 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:630 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 630);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:632 */
-  ATTR_parser_nodes___AStdClassdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:633 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:634 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 634);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:636 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 636);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AStdClassdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:637 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 637);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:638 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 638);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AStdClassdef____n_classkind(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:639 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 639);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:640 */
-  ATTR_parser_nodes___AStdClassdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:641 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:642 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 642);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  }
-  fra.me.REG[6] = CALL_abstract_collection___Collection___iterator(fra.me.REG[6])(fra.me.REG[6]);
-  /* ./parser//parser_prod.nit:644 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[6])(fra.me.REG[6]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[5] = CALL_abstract_collection___Iterator___item(fra.me.REG[6])(fra.me.REG[6]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[5], COLOR_AFormaldef, ID_AFormaldef)) /*cast AFormaldef*/;
-      /* ./parser//parser_prod.nit:645 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 645);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:646 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_formaldefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 646);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AStdClassdef____n_formaldefs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
-      /* ./parser//parser_prod.nit:647 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:644 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[6])(fra.me.REG[6]);
-  }
-  label1: while(0);
-  fra.me.REG[7] = CALL_abstract_collection___Collection___iterator(fra.me.REG[7])(fra.me.REG[7]);
-  /* ./parser//parser_prod.nit:649 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[7])(fra.me.REG[7]);
+  /* ./parser//parser_prod.nit:606 */
+  CALL_parser_prod___ATopClassdef___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___ATopClassdef___init_atopclassdef_1));
+  stack_frame_head = fra.me.prev;
+  init_table[itpos20] = 1;
+  return;
+}
+  void OC_parser_prod___ATopClassdef___init_atopclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:607 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ATopClassdef___init_atopclassdef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:608 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[6] = CALL_abstract_collection___Iterator___item(fra.me.REG[7])(fra.me.REG[7]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[6], COLOR_ASuperclass, ID_ASuperclass)) /*cast ASuperclass*/;
-      /* ./parser//parser_prod.nit:650 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 650);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:651 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_superclasses");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 651);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_parser_nodes___AStdClassdef____n_superclasses(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-      /* ./parser//parser_prod.nit:652 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:649 */
-      goto label2;
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 608);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[7])(fra.me.REG[7]);
-  }
-  label2: while(0);
-  fra.me.REG[8] = CALL_abstract_collection___Collection___iterator(fra.me.REG[8])(fra.me.REG[8]);
-  /* ./parser//parser_prod.nit:654 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[8])(fra.me.REG[8]);
+    /* ./parser//parser_prod.nit:609 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[7] = CALL_abstract_collection___Iterator___item(fra.me.REG[8])(fra.me.REG[8]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[7], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-      /* ./parser//parser_prod.nit:655 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 655);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:656 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 656);
-        nit_exit(1);
-      }
-      fra.me.REG[6] = ATTR_parser_nodes___AStdClassdef____n_propdefs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
-      /* ./parser//parser_prod.nit:657 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:654 */
-      goto label3;
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 609);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[8])(fra.me.REG[8]);
+    fra.me.REG[1] = ATTR_parser_nodes___ATopClassdef____n_propdefs(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:610 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label3: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos18] = 1;
-  return;
-}
 void parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 827;
+  fra.me.line = 614;
   fra.me.meth = LOCATE_parser_prod___ATopClassdef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:616 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:829 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 829);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 616);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:830 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 830);
-        nit_exit(1);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:616 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:617 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 617);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:831 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:618 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-          /* ./parser//parser_prod.nit:832 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:619 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 832);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 619);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:833 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:620 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 833);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 620);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:834 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 834);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(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:621 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 621);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:836 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:623 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 836);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 623);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:838 */
+        /* ./parser//parser_prod.nit:625 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:829 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -4715,298 +3444,243 @@ void parser_prod___ATopClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ATopClassdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 843;
+  fra.me.line = 630;
   fra.me.meth = LOCATE_parser_prod___ATopClassdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   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:632 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:845 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 845);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 632);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:846 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:845 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ATopClassdef___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ATopClassdef___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ATopClassdef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:633 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATopClassdef___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table){
+  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 850;
-  fra.me.meth = LOCATE_parser_prod___ATopClassdef___visit_all_reverse;
+  fra.me.line = 638;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:853 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 853);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:854 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:854 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:855 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 855);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:856 */
-    } else {
-      /* ./parser//parser_prod.nit:854 */
-      goto label1;
-    }
-  }
-  label1: while(0);
   stack_frame_head = fra.me.prev;
+  init_table[itpos21] = 1;
   return;
 }
-void parser_prod___ATopClassdef___empty_init(val_t p0, int* init_table){
-  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
-  struct {struct stack_frame_t me;} fra;
+void parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p1, int* init_table){
+  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos19]) return;
+  if (init_table[itpos22]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 813;
-  fra.me.meth = LOCATE_parser_prod___ATopClassdef___empty_init;
+  fra.me.line = 640;
+  fra.me.meth = LOCATE_parser_prod___AMainClassdef___init_amainclassdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:813 */
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:644 */
+  CALL_parser_prod___AMainClassdef___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___AMainClassdef___init_amainclassdef_1));
   stack_frame_head = fra.me.prev;
-  init_table[itpos19] = 1;
+  init_table[itpos22] = 1;
   return;
 }
-void parser_prod___ATopClassdef___init_atopclassdef(val_t p0, val_t p1, int* init_table){
-  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATopClassdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos20]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 815;
-  fra.me.meth = LOCATE_parser_prod___ATopClassdef___init_atopclassdef;
-  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;
-  /* ./parser//parser_prod.nit:819 */
-  CALL_parser_prod___ATopClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:820 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
+  void OC_parser_prod___AMainClassdef___init_amainclassdef_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:645 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AMainClassdef___init_amainclassdef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:646 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 646);
+    }
+    /* ./parser//parser_prod.nit:647 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-      /* ./parser//parser_prod.nit:821 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 821);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:822 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 822);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___ATopClassdef____n_propdefs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:823 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:820 */
-      goto label1;
+      nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 647);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+    fra.me.REG[1] = ATTR_parser_nodes___AMainClassdef____n_propdefs(closctx->REG[0]);
+    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:648 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos20] = 1;
-  return;
-}
 void parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 877;
+  fra.me.line = 652;
   fra.me.meth = LOCATE_parser_prod___AMainClassdef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:654 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:879 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 879);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 654);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:880 */
-      if (UNTAG_Bool(REGB0)) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:654 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:655 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 880);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 655);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+      fra.me.REG[3] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[3])(fra.me.REG[3], REGB2);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:881 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:656 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-          /* ./parser//parser_prod.nit:882 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:657 */
+          REGB3 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 882);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 657);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:883 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:658 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 883);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 658);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:884 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 884);
-            nit_exit(1);
+          fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(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:659 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 659);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:886 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:661 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 886);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 661);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
+          CALL_abstract_collection___Map___remove_at(fra.me.REG[3])(fra.me.REG[3], REGB2);
         }
-        /* ./parser//parser_prod.nit:888 */
+        /* ./parser//parser_prod.nit:663 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:879 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -5014,195 +3688,100 @@ void parser_prod___AMainClassdef___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AMainClassdef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 893;
+  fra.me.line = 668;
   fra.me.meth = LOCATE_parser_prod___AMainClassdef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   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:670 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:895 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 895);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_propdefs", LOCATE_parser_prod, 670);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:896 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:895 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMainClassdef___visit_all_reverse(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 = 900;
-  fra.me.meth = LOCATE_parser_prod___AMainClassdef___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:903 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 903);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:904 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:904 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:905 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 905);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:906 */
-    } else {
-      /* ./parser//parser_prod.nit:904 */
-      goto label1;
-    }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AMainClassdef___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AMainClassdef___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AMainClassdef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:671 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMainClassdef___empty_init(val_t p0, int* init_table){
-  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
+void parser_prod___AConcreteClasskind___empty_init(val_t p0, int* init_table){
+  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos21]) return;
+  if (init_table[itpos23]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 863;
-  fra.me.meth = LOCATE_parser_prod___AMainClassdef___empty_init;
+  fra.me.line = 676;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___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:863 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos21] = 1;
-  return;
-}
-void parser_prod___AMainClassdef___init_amainclassdef(val_t p0, val_t p1, int* init_table){
-  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainClassdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos22]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 865;
-  fra.me.meth = LOCATE_parser_prod___AMainClassdef___init_amainclassdef;
-  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;
-  /* ./parser//parser_prod.nit:869 */
-  CALL_parser_prod___AMainClassdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:870 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_APropdef, ID_APropdef)) /*cast APropdef*/;
-      /* ./parser//parser_prod.nit:871 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 871);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:872 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_propdefs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 872);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___AMainClassdef____n_propdefs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:873 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:870 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos22] = 1;
+  init_table[itpos23] = 1;
   return;
 }
-void parser_prod___AConcreteClasskind___n_kwclass__eq(val_t p0, val_t p1){
+void parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
+  if (init_table[itpos24]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 912;
-  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___n_kwclass__eq;
+  fra.me.line = 678;
+  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___init_aconcreteclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:914 */
+  /* ./parser//parser_prod.nit:682 */
+  CALL_parser_prod___AConcreteClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:683 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 683);
+  }
   ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:915 */
+  /* ./parser//parser_prod.nit:684 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 684);
+  }
   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[itpos24] = 1;
   return;
 }
 void parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p1, val_t p2){
@@ -5212,7 +3791,7 @@ void parser_prod___AConcreteClasskind___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 = 929;
+  fra.me.line = 687;
   fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5223,13 +3802,11 @@ void parser_prod___AConcreteClasskind___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:689 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:931 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 931);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser_prod, 689);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5239,8 +3816,8 @@ void parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:690 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:932 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -5254,31 +3831,25 @@ void parser_prod___AConcreteClasskind___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:691 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:933 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 933);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 691);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:692 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
-      /* ./parser//parser_prod.nit:934 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 934);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 692);
       }
-      /* ./parser//parser_prod.nit:935 */
+      /* ./parser//parser_prod.nit:693 */
       ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:937 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 937);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:695 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 695);
     }
-    /* ./parser//parser_prod.nit:939 */
+    /* ./parser//parser_prod.nit:697 */
     goto label1;
   }
   label1: while(0);
@@ -5291,7 +3862,7 @@ void parser_prod___AConcreteClasskind___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 = 943;
+  fra.me.line = 701;
   fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5299,141 +3870,82 @@ void parser_prod___AConcreteClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:703 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:945 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 945);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(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___AConcreteClasskind___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 948;
-  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:950 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 950);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser_prod, 703);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AConcreteClasskind____n_kwclass(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___AConcreteClasskind___empty_init(val_t p0, int* init_table){
-  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
+void parser_prod___AAbstractClasskind___empty_init(val_t p0, int* init_table){
+  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos23]) return;
+  if (init_table[itpos25]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 918;
-  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___empty_init;
+  fra.me.line = 707;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___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:918 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos23] = 1;
+  init_table[itpos25] = 1;
   return;
 }
-void parser_prod___AConcreteClasskind___init_aconcreteclasskind(val_t p0, val_t p1, int* init_table){
-  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos24]) return;
+  if (init_table[itpos26]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 920;
-  fra.me.meth = LOCATE_parser_prod___AConcreteClasskind___init_aconcreteclasskind;
+  fra.me.line = 709;
+  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___init_aabstractclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:924 */
-  CALL_parser_prod___AConcreteClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:714 */
+  CALL_parser_prod___AAbstractClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:715 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:925 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 925);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 715);
   }
-  ATTR_parser_nodes___AConcreteClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:716 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:926 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 926);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 716);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:717 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 717);
+  }
+  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:718 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 718);
+  }
+  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[itpos24] = 1;
-  return;
-}
-void parser_prod___AAbstractClasskind___n_kwabstract__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 954;
-  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___n_kwabstract__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:956 */
-  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:957 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAbstractClasskind___n_kwclass__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 959;
-  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___n_kwclass__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:961 */
-  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:962 */
-  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[itpos26] = 1;
   return;
 }
 void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t p2){
@@ -5443,7 +3955,7 @@ void parser_prod___AAbstractClasskind___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 = 979;
+  fra.me.line = 721;
   fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5454,13 +3966,11 @@ void parser_prod___AAbstractClasskind___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:723 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:981 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 981);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser_prod, 723);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5470,8 +3980,8 @@ void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:724 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:982 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -5485,40 +3995,32 @@ void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:725 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:983 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 983);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 725);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:726 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwabstract, ID_TKwabstract)) /*cast TKwabstract*/;
-      /* ./parser//parser_prod.nit:984 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 984);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 726);
       }
-      /* ./parser//parser_prod.nit:985 */
+      /* ./parser//parser_prod.nit:727 */
       ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:987 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 987);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:729 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 729);
     }
-    /* ./parser//parser_prod.nit:989 */
+    /* ./parser//parser_prod.nit:731 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:733 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:991 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 991);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser_prod, 733);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5528,8 +4030,8 @@ void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:734 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:992 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -5543,31 +4045,25 @@ void parser_prod___AAbstractClasskind___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:735 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:993 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 993);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 735);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:736 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwclass, ID_TKwclass)) /*cast TKwclass*/;
-      /* ./parser//parser_prod.nit:994 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 994);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 736);
       }
-      /* ./parser//parser_prod.nit:995 */
+      /* ./parser//parser_prod.nit:737 */
       ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:997 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 997);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:739 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 739);
     }
-    /* ./parser//parser_prod.nit:999 */
+    /* ./parser//parser_prod.nit:741 */
     goto label1;
   }
   label1: while(0);
@@ -5580,7 +4076,7 @@ void parser_prod___AAbstractClasskind___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 = 1003;
+  fra.me.line = 745;
   fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -5589,161 +4085,75 @@ void parser_prod___AAbstractClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:747 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1005);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1006);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(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___AAbstractClasskind___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1009;
-  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1011 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabstract");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1011);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwabstract", LOCATE_parser_prod, 747);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(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:748 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1012 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwclass");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1012);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwclass", LOCATE_parser_prod, 748);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AAbstractClasskind____n_kwclass(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___AAbstractClasskind___empty_init(val_t p0, int* init_table){
-  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
+void parser_prod___AInterfaceClasskind___empty_init(val_t p0, int* init_table){
+  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos25]) return;
+  if (init_table[itpos27]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 965;
-  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___empty_init;
+  fra.me.line = 752;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___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:965 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos25] = 1;
+  init_table[itpos27] = 1;
   return;
 }
-void parser_prod___AAbstractClasskind___init_aabstractclasskind(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbstractClasskind].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos26]) return;
+  if (init_table[itpos28]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 967;
-  fra.me.meth = LOCATE_parser_prod___AAbstractClasskind___init_aabstractclasskind;
+  fra.me.line = 754;
+  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:972 */
-  CALL_parser_prod___AAbstractClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:758 */
+  CALL_parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:759 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:973 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 973);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 759);
   }
-  ATTR_parser_nodes___AAbstractClasskind____n_kwabstract(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:760 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:974 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 974);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 760);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 975);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAbstractClasskind____n_kwclass(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:976 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 976);
-    nit_exit(1);
-  }
-  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[itpos26] = 1;
-  return;
-}
-void parser_prod___AInterfaceClasskind___n_kwinterface__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1016;
-  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___n_kwinterface__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1018 */
-  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1019 */
-  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[itpos28] = 1;
   return;
 }
 void parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t p1, val_t p2){
@@ -5753,7 +4163,7 @@ void parser_prod___AInterfaceClasskind___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 = 1033;
+  fra.me.line = 763;
   fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -5764,13 +4174,11 @@ void parser_prod___AInterfaceClasskind___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:765 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1035 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1035);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser_prod, 765);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -5780,8 +4188,8 @@ void parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:766 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1036 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -5795,31 +4203,25 @@ void parser_prod___AInterfaceClasskind___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:767 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1037 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1037);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 767);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:768 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinterface, ID_TKwinterface)) /*cast TKwinterface*/;
-      /* ./parser//parser_prod.nit:1038 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1038);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 768);
       }
-      /* ./parser//parser_prod.nit:1039 */
+      /* ./parser//parser_prod.nit:769 */
       ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1041 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1041);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:771 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 771);
     }
-    /* ./parser//parser_prod.nit:1043 */
+    /* ./parser//parser_prod.nit:773 */
     goto label1;
   }
   label1: while(0);
@@ -5832,7 +4234,7 @@ void parser_prod___AInterfaceClasskind___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 = 1047;
+  fra.me.line = 777;
   fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -5840,132 +4242,78 @@ void parser_prod___AInterfaceClasskind___visit_all(val_t p0, val_t p1){
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:779 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1049 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1049);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinterface", LOCATE_parser_prod, 779);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(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___AInterfaceClasskind___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1052;
-  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinterface");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1054);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(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___AInterfaceClasskind___empty_init(val_t p0, int* init_table){
-  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
+void parser_prod___AEnumClasskind___empty_init(val_t p0, int* init_table){
+  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEnumClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos27]) return;
+  if (init_table[itpos29]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1022;
-  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___empty_init;
+  fra.me.line = 783;
+  fra.me.meth = LOCATE_parser_prod___AEnumClasskind___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:1022 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos27] = 1;
+  init_table[itpos29] = 1;
   return;
 }
-void parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(val_t p0, val_t p1, int* init_table){
-  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInterfaceClasskind].i;
+void parser_prod___AEnumClasskind___init_aenumclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEnumClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos28]) return;
+  if (init_table[itpos30]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1024;
-  fra.me.meth = LOCATE_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind;
+  fra.me.line = 785;
+  fra.me.meth = LOCATE_parser_prod___AEnumClasskind___init_aenumclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1028 */
-  CALL_parser_prod___AInterfaceClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:789 */
+  CALL_parser_prod___AEnumClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:790 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1029 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1029);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 790);
   }
-  ATTR_parser_nodes___AInterfaceClasskind____n_kwinterface(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:791 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1030 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1030);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 791);
   }
   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[itpos28] = 1;
-  return;
-}
-void parser_prod___AUniversalClasskind___n_kwuniversal__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1058;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___n_kwuniversal__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1060 */
-  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1061 */
-  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[itpos30] = 1;
   return;
 }
-void parser_prod___AUniversalClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AEnumClasskind___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 1075;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___replace_child;
+  fra.me.line = 794;
+  fra.me.meth = LOCATE_parser_prod___AEnumClasskind___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -5975,15 +4323,13 @@ void parser_prod___AUniversalClasskind___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1077 */
+  /* ./parser//parser_prod.nit:796 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1077);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser_prod, 796);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]);
+  fra.me.REG[3] = ATTR_parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5991,8 +4337,8 @@ void parser_prod___AUniversalClasskind___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:797 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1078 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6006,210 +4352,282 @@ void parser_prod___AUniversalClasskind___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:798 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1079 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1079);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 798);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwuniversal, ID_TKwuniversal)) /*cast TKwuniversal*/;
-      /* ./parser//parser_prod.nit:1080 */
+      /* ./parser//parser_prod.nit:799 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwenum, ID_TKwenum)) /*cast TKwenum*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1080);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 799);
       }
-      /* ./parser//parser_prod.nit:1081 */
-      ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:800 */
+      ATTR_parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1083 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1083);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:802 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 802);
     }
-    /* ./parser//parser_prod.nit:1085 */
+    /* ./parser//parser_prod.nit:804 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AUniversalClasskind___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1089;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___visit_all;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1091);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(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___AUniversalClasskind___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AEnumClasskind___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1094;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___visit_all_reverse;
+  fra.me.line = 808;
+  fra.me.meth = LOCATE_parser_prod___AEnumClasskind___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1096 */
+  /* ./parser//parser_prod.nit:810 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEnumClasskind____n_kwenum(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwuniversal");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1096);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwenum", LOCATE_parser_prod, 810);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]);
+  fra.me.REG[0] = ATTR_parser_nodes___AEnumClasskind____n_kwenum(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___AUniversalClasskind___empty_init(val_t p0, int* init_table){
-  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUniversalClasskind].i;
+void parser_prod___AExternClasskind___empty_init(val_t p0, int* init_table){
+  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternClasskind].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos29]) return;
+  if (init_table[itpos31]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1064;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___empty_init;
+  fra.me.line = 814;
+  fra.me.meth = LOCATE_parser_prod___AExternClasskind___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:1064 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos29] = 1;
+  init_table[itpos31] = 1;
   return;
 }
-void parser_prod___AUniversalClasskind___init_auniversalclasskind(val_t p0, val_t p1, int* init_table){
-  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUniversalClasskind].i;
+void parser_prod___AExternClasskind___init_aexternclasskind(val_t p0, val_t p1, int* init_table){
+  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternClasskind].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos30]) return;
+  if (init_table[itpos32]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1066;
-  fra.me.meth = LOCATE_parser_prod___AUniversalClasskind___init_auniversalclasskind;
+  fra.me.line = 816;
+  fra.me.meth = LOCATE_parser_prod___AExternClasskind___init_aexternclasskind;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1070 */
-  CALL_parser_prod___AUniversalClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:820 */
+  CALL_parser_prod___AExternClasskind___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:821 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1071 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1071);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 821);
   }
-  ATTR_parser_nodes___AUniversalClasskind____n_kwuniversal(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:822 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1072 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1072);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 822);
   }
   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[itpos30] = 1;
-  return;
-}
-void parser_prod___AFormaldef___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1100;
-  fra.me.meth = LOCATE_parser_prod___AFormaldef___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1102 */
-  ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1103 */
-  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[itpos32] = 1;
   return;
 }
-void parser_prod___AFormaldef___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AExternClasskind___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 1105;
-  fra.me.meth = LOCATE_parser_prod___AFormaldef___n_type__eq;
+  fra.me.line = 825;
+  fra.me.meth = LOCATE_parser_prod___AExternClasskind___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:1107 */
-  ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1108 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:827 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=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;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser_prod, 827);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  fra.me.REG[3] = ATTR_parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1109 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1109);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  } 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:828 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:829 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 829);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:830 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwextern, ID_TKwextern)) /*cast TKwextern*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 830);
+      }
+      /* ./parser//parser_prod.nit:831 */
+      ATTR_parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:833 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 833);
+    }
+    /* ./parser//parser_prod.nit:835 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternClasskind___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 839;
+  fra.me.meth = LOCATE_parser_prod___AExternClasskind___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:841 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternClasskind____n_kwextern(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwextern", LOCATE_parser_prod, 841);
+  }
+  fra.me.REG[0] = ATTR_parser_nodes___AExternClasskind____n_kwextern(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___AFormaldef___empty_init(val_t p0, int* init_table){
+  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos33]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 845;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___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[itpos33] = 1;
+  return;
+}
+void parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table){
+  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].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[itpos34]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 847;
+  fra.me.meth = LOCATE_parser_prod___AFormaldef___init_aformaldef;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:852 */
+  CALL_parser_prod___AFormaldef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:853 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 853);
+  }
+  ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:854 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 854);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:855 */
+  ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:856 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==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:857 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 857);
+    }
+    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[itpos34] = 1;
   return;
 }
 void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -6219,7 +4637,7 @@ void parser_prod___AFormaldef___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 = 1129;
+  fra.me.line = 861;
   fra.me.meth = LOCATE_parser_prod___AFormaldef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6230,13 +4648,11 @@ void parser_prod___AFormaldef___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:863 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1131 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1131);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 863);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -6246,8 +4662,8 @@ void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:864 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1132 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6261,36 +4677,30 @@ void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:865 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1133 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1133);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 865);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:866 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      /* ./parser//parser_prod.nit:1134 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1134);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 866);
       }
-      /* ./parser//parser_prod.nit:1135 */
+      /* ./parser//parser_prod.nit:867 */
       ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1137 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1137);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:869 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 869);
     }
-    /* ./parser//parser_prod.nit:1139 */
+    /* ./parser//parser_prod.nit:871 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:873 */
   fra.me.REG[3] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1141 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -6303,8 +4713,8 @@ void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:874 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1142 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6318,29 +4728,25 @@ void parser_prod___AFormaldef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:875 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1143 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1143);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 875);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:876 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:1144 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1144);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 876);
       }
-      /* ./parser//parser_prod.nit:1145 */
+      /* ./parser//parser_prod.nit:877 */
       ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1147 */
+      /* ./parser//parser_prod.nit:879 */
       ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1149 */
+    /* ./parser//parser_prod.nit:881 */
     goto label1;
   }
   label1: while(0);
@@ -6354,7 +4760,7 @@ void parser_prod___AFormaldef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1153;
+  fra.me.line = 885;
   fra.me.meth = LOCATE_parser_prod___AFormaldef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -6363,75 +4769,17 @@ void parser_prod___AFormaldef___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:887 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1155 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1155);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1156 */
-  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)) {
-    fra.me.REG[0] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
-    /* ./parser//parser_prod.nit:1157 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1157);
-      nit_exit(1);
-    }
-    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___AFormaldef___visit_all_reverse(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 = 1161;
-  fra.me.meth = LOCATE_parser_prod___AFormaldef___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1163 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1163);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 887);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____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:888 */
   fra.me.REG[2] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1164 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6445,80 +4793,86 @@ void parser_prod___AFormaldef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:889 */
     fra.me.REG[0] = ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
-    /* ./parser//parser_prod.nit:1165 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1165);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 889);
     }
     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___AFormaldef___empty_init(val_t p0, int* init_table){
-  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].i;
+void parser_prod___ASuperclass___empty_init(val_t p0, int* init_table){
+  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos31]) return;
+  if (init_table[itpos35]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1113;
-  fra.me.meth = LOCATE_parser_prod___AFormaldef___empty_init;
+  fra.me.line = 894;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___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:1113 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos31] = 1;
+  init_table[itpos35] = 1;
   return;
 }
-void parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFormaldef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
+  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos32]) return;
+  if (init_table[itpos36]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1115;
-  fra.me.meth = LOCATE_parser_prod___AFormaldef___init_aformaldef;
+  fra.me.line = 896;
+  fra.me.meth = LOCATE_parser_prod___ASuperclass___init_asuperclass;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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:1120 */
-  CALL_parser_prod___AFormaldef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1121 */
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:902 */
+  CALL_parser_prod___ASuperclass___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:903 */
+  ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:904 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1121);
-    nit_exit(1);
+    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;
+    }
   }
-  ATTR_parser_nodes___AFormaldef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1122 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1122);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:905 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 905);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1123 */
-  ATTR_parser_nodes___AFormaldef____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:907 */
+  ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:908 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1124 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6532,57 +4886,28 @@ void parser_prod___AFormaldef___init_aformaldef(val_t p0, val_t p1, val_t p2, in
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:909 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1125 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1125);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 909);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:911 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 911);
+  }
+  ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:912 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 912);
+  }
+  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[itpos32] = 1;
-  return;
-}
-void parser_prod___ASuperclass___n_kwspecial__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1170;
-  fra.me.meth = LOCATE_parser_prod___ASuperclass___n_kwspecial__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1172 */
-  ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1173 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASuperclass___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1175;
-  fra.me.meth = LOCATE_parser_prod___ASuperclass___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1177 */
-  ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1178 */
-  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[itpos36] = 1;
   return;
 }
 void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
@@ -6592,7 +4917,7 @@ void parser_prod___ASuperclass___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 = 1195;
+  fra.me.line = 915;
   fra.me.meth = LOCATE_parser_prod___ASuperclass___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -6603,24 +4928,23 @@ void parser_prod___ASuperclass___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1197 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1197);
-    nit_exit(1);
-  }
+  /* ./parser//parser_prod.nit:917 */
   fra.me.REG[3] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
+    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:918 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1198 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6634,40 +4958,83 @@ void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:919 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1199 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1199);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 919);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:920 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwspecial, ID_TKwspecial)) /*cast TKwspecial*/;
-      /* ./parser//parser_prod.nit:1200 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1200);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 920);
       }
-      /* ./parser//parser_prod.nit:1201 */
+      /* ./parser//parser_prod.nit:921 */
       ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1203 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1203);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:923 */
+      ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:925 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:927 */
+  fra.me.REG[3] = ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      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:928 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:929 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 929);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:930 */
+      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, 930);
+      }
+      /* ./parser//parser_prod.nit:931 */
+      ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:933 */
+      ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1205 */
+    /* ./parser//parser_prod.nit:935 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:937 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1207 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1207);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 937);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -6677,8 +5044,8 @@ void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:938 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1208 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -6692,31 +5059,25 @@ void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:939 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1209 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1209);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 939);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:940 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:1210 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1210);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 940);
       }
-      /* ./parser//parser_prod.nit:1211 */
+      /* ./parser//parser_prod.nit:941 */
       ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1213 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1213);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:943 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 943);
     }
-    /* ./parser//parser_prod.nit:1215 */
+    /* ./parser//parser_prod.nit:945 */
     goto label1;
   }
   label1: while(0);
@@ -6726,10 +5087,11 @@ void parser_prod___ASuperclass___replace_child(val_t p0, val_t p1, val_t p2){
 void parser_prod___ASuperclass___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 = 1219;
+  fra.me.line = 949;
   fra.me.meth = LOCATE_parser_prod___ASuperclass___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -6738,465 +5100,341 @@ void parser_prod___ASuperclass___visit_all(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1221 */
+  /* ./parser//parser_prod.nit:951 */
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1221);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1222 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1222);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:952 */
+    fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwspecial, ID_TKwspecial)) /*cast TKwspecial*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 952);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ASuperclass____n_type(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___ASuperclass___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1225;
-  fra.me.meth = LOCATE_parser_prod___ASuperclass___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1227 */
+  /* ./parser//parser_prod.nit:954 */
+  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwspecial");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1227);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:955 */
+    fra.me.REG[2] = ATTR_parser_nodes___ASuperclass____n_kwsuper(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 955);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:957 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1228 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1228);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 957);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperclass____n_type(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___ASuperclass___empty_init(val_t p0, int* init_table){
-  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
+void parser_prod___AAttrPropdef___empty_init(val_t p0, int* init_table){
+  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos33]) return;
+  if (init_table[itpos37]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1181;
-  fra.me.meth = LOCATE_parser_prod___ASuperclass___empty_init;
+  fra.me.line = 961;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___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:1181 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos33] = 1;
+  init_table[itpos37] = 1;
   return;
 }
-void parser_prod___ASuperclass___init_asuperclass(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperclass].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, val_t p10, int* init_table){
+  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos34]) return;
+  if (init_table[itpos38]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1183;
-  fra.me.meth = LOCATE_parser_prod___ASuperclass___init_asuperclass;
+  fra.me.line = 963;
+  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___init_aattrpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 11;
   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[9] = NIT_NULL;
+  fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:1188 */
-  CALL_parser_prod___ASuperclass___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1189 */
+  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;
+  fra.me.REG[9] = p9;
+  fra.me.REG[10] = p10;
+  /* ./parser//parser_prod.nit:976 */
+  CALL_parser_prod___AAttrPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:977 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:978 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1189);
-    nit_exit(1);
+    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;
+    }
   }
-  ATTR_parser_nodes___ASuperclass____n_kwspecial(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1190 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1190);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:979 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 979);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1191 */
+  /* ./parser//parser_prod.nit:981 */
+  ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:982 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1191);
-    nit_exit(1);
+    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;
+    }
   }
-  ATTR_parser_nodes___ASuperclass____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1192 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1192);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:983 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 983);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  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[itpos34] = 1;
-  return;
-}
-void parser_prod___AAttrPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1232;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1234 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1235 */
+  /* ./parser//parser_prod.nit:985 */
+  ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:986 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1236 */
+    /* ./parser//parser_prod.nit:987 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1236);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 987);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1253;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1255 */
-  ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1256 */
+  /* ./parser//parser_prod.nit:989 */
+  ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:990 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[4]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1257 */
+    /* ./parser//parser_prod.nit:991 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1257);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 991);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1260;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1262 */
-  ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1263 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_kwvar__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1265;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_kwvar__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1267 */
-  ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1268 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1270;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1272 */
-  ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1273 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1275;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1277 */
-  ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1278 */
+  /* ./parser//parser_prod.nit:993 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 993);
+  }
+  ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:994 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 994);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:995 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 995);
+  }
+  ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:996 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 996);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:997 */
+  ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:998 */
+  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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1279 */
+    /* ./parser//parser_prod.nit:999 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1279);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 999);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_readable__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1239;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_readable__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1241 */
-  ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1242 */
+  /* ./parser//parser_prod.nit:1001 */
+  ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[8];
+  /* ./parser//parser_prod.nit:1002 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1243 */
+    /* ./parser//parser_prod.nit:1003 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1243);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1003);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_writable__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1246;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_writable__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1248 */
-  ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1249 */
+  /* ./parser//parser_prod.nit:1005 */
+  ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[9];
+  /* ./parser//parser_prod.nit:1006 */
+  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[9]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1250 */
+    /* ./parser//parser_prod.nit:1007 */
+    REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1250);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1007);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrPropdef___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1282;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1284 */
-  ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1285 */
+  /* ./parser//parser_prod.nit:1009 */
+  ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[10];
+  /* ./parser//parser_prod.nit:1010 */
+  REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[10]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[10])(fra.me.REG[10], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1286 */
+    /* ./parser//parser_prod.nit:1011 */
+    REGB0 = TAG_Bool(fra.me.REG[10]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1286);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1011);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[10])(fra.me.REG[10], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
+  init_table[itpos38] = 1;
   return;
 }
 void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -7206,7 +5444,7 @@ void parser_prod___AAttrPropdef___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 = 1337;
+  fra.me.line = 1015;
   fra.me.meth = LOCATE_parser_prod___AAttrPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -7217,9 +5455,9 @@ void parser_prod___AAttrPropdef___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:1017 */
   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]));
-  /* ./parser//parser_prod.nit:1339 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7232,8 +5470,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1018 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1340 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7247,34 +5485,30 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1019 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1341 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1341);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1019);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1020 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:1342 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1342);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1020);
       }
-      /* ./parser//parser_prod.nit:1343 */
+      /* ./parser//parser_prod.nit:1021 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1345 */
+      /* ./parser//parser_prod.nit:1023 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1347 */
+    /* ./parser//parser_prod.nit:1025 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1027 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1349 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7287,8 +5521,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1028 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1350 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7302,34 +5536,30 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1029 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1351 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1351);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1029);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1030 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-      /* ./parser//parser_prod.nit:1352 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1352);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1030);
       }
-      /* ./parser//parser_prod.nit:1353 */
+      /* ./parser//parser_prod.nit:1031 */
       ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1355 */
+      /* ./parser//parser_prod.nit:1033 */
       ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1357 */
+    /* ./parser//parser_prod.nit:1035 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1037 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1359 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7342,8 +5572,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1038 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1360 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7357,34 +5587,30 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1039 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1361 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1361);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1039);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1040 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-      /* ./parser//parser_prod.nit:1362 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1362);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1040);
       }
-      /* ./parser//parser_prod.nit:1363 */
+      /* ./parser//parser_prod.nit:1041 */
       ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1365 */
+      /* ./parser//parser_prod.nit:1043 */
       ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1367 */
+    /* ./parser//parser_prod.nit:1045 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1047 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1369 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7397,8 +5623,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1048 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1370 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7412,38 +5638,32 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1049 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1371 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1371);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1049);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1050 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:1372 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1372);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1050);
       }
-      /* ./parser//parser_prod.nit:1373 */
+      /* ./parser//parser_prod.nit:1051 */
       ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1375 */
+      /* ./parser//parser_prod.nit:1053 */
       ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1377 */
+    /* ./parser//parser_prod.nit:1055 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1057 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1379 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1379);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 1057);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -7453,8 +5673,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1058 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1380 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7468,40 +5688,32 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1059 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1381 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1381);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1059);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1060 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:1382 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1382);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1060);
       }
-      /* ./parser//parser_prod.nit:1383 */
+      /* ./parser//parser_prod.nit:1061 */
       ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1385 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1385);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1063 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1063);
     }
-    /* ./parser//parser_prod.nit:1387 */
+    /* ./parser//parser_prod.nit:1065 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1067 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1389 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1389);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 1067);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -7511,8 +5723,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1068 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1390 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7526,51 +5738,44 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1069 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1391 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1391);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1069);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1070 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
-      /* ./parser//parser_prod.nit:1392 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1392);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1070);
       }
-      /* ./parser//parser_prod.nit:1393 */
+      /* ./parser//parser_prod.nit:1071 */
       ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1395 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1395);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1073 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1073);
     }
-    /* ./parser//parser_prod.nit:1397 */
+    /* ./parser//parser_prod.nit:1075 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1399 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1399);
-    nit_exit(1);
-  }
+  /* ./parser//parser_prod.nit:1077 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB0 = REGB1;
+    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:1078 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1400 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7584,36 +5789,81 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1079 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1401 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1401);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1079);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1080 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      /* ./parser//parser_prod.nit:1402 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1402);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1080);
       }
-      /* ./parser//parser_prod.nit:1403 */
+      /* ./parser//parser_prod.nit:1081 */
       ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1405 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1405);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1083 */
+      ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1407 */
+    /* ./parser//parser_prod.nit:1085 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1087 */
+  fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      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:1088 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:1089 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1089);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1090 */
+      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, 1090);
+      }
+      /* ./parser//parser_prod.nit:1091 */
+      ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1093 */
+      ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1095 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1097 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1409 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7626,8 +5876,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1098 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1410 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7641,34 +5891,30 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1099 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1411 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1411);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1099);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1100 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:1412 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1412);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1100);
       }
-      /* ./parser//parser_prod.nit:1413 */
+      /* ./parser//parser_prod.nit:1101 */
       ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1415 */
+      /* ./parser//parser_prod.nit:1103 */
       ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1417 */
+    /* ./parser//parser_prod.nit:1105 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1107 */
   fra.me.REG[3] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:1419 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -7681,8 +5927,8 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1108 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1420 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7696,29 +5942,25 @@ void parser_prod___AAttrPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1109 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1421 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1421);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1109);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1110 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:1422 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1422);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1110);
       }
-      /* ./parser//parser_prod.nit:1423 */
+      /* ./parser//parser_prod.nit:1111 */
       ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1425 */
+      /* ./parser//parser_prod.nit:1113 */
       ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1427 */
+    /* ./parser//parser_prod.nit:1115 */
     goto label1;
   }
   label1: while(0);
@@ -7732,7 +5974,7 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1431;
+  fra.me.line = 1119;
   fra.me.meth = LOCATE_parser_prod___AAttrPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -7741,9 +5983,9 @@ void parser_prod___AAttrPropdef___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:1121 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1433 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7757,20 +5999,18 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1122 */
     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*/;
-    /* ./parser//parser_prod.nit:1434 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1434);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1122);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1124 */
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1436 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7784,20 +6024,18 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1125 */
     fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-    /* ./parser//parser_prod.nit:1437 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1437);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1125);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1127 */
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1439 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7811,20 +6049,18 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1128 */
     fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-    /* ./parser//parser_prod.nit:1440 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1440);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1128);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1130 */
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1442 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7838,50 +6074,84 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1131 */
     fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-    /* ./parser//parser_prod.nit:1443 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1443);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1131);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1133 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1445 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1445);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 1133);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____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:1134 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1446 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1446);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 1134);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1447 */
+  /* ./parser//parser_prod.nit:1135 */
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(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:1136 */
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1136);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:1138 */
+  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1447);
-    nit_exit(1);
+    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;
+    }
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1139 */
+    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id2(fra.me.REG[0]);
+    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1139);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:1141 */
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1448 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7895,20 +6165,18 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1142 */
     fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-    /* ./parser//parser_prod.nit:1449 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1449);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1142);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1144 */
   fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1451 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -7922,288 +6190,66 @@ void parser_prod___AAttrPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1145 */
     fra.me.REG[0] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
     REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-    /* ./parser//parser_prod.nit:1452 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1452);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1145);
     }
     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___AAttrPropdef___visit_all_reverse(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 = 1456;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1458 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1459 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1459);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1461 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-    /* ./parser//parser_prod.nit:1462 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1462);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1464 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAble, ID_AAble)) /*cast AAble*/;
-    /* ./parser//parser_prod.nit:1465 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1465);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1467 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-    /* ./parser//parser_prod.nit:1468 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1468);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1470 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1470);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1471 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1471);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1472 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1472);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1473 */
-  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)) {
-    fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-    /* ./parser//parser_prod.nit:1474 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1474);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1476 */
-  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)) {
-    fra.me.REG[0] = ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-    /* ./parser//parser_prod.nit:1477 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1477);
-      nit_exit(1);
-    }
-    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___AAttrPropdef___empty_init(val_t p0, int* init_table){
-  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
+void parser_prod___AMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos35]) return;
+  if (init_table[itpos39]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1290;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___empty_init;
+  fra.me.line = 1150;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___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:1290 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos35] = 1;
+  init_table[itpos39] = 1;
   return;
 }
-void parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, val_t p9, int* init_table){
-  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+void parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
+  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].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[itpos36]) return;
+  if (init_table[itpos40]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1292;
-  fra.me.meth = LOCATE_parser_prod___AAttrPropdef___init_aattrpropdef;
+  fra.me.line = 1152;
+  fra.me.meth = LOCATE_parser_prod___AMethPropdef___init_amethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 6;
   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[9] = 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;
-  fra.me.REG[9] = p9;
-  /* ./parser//parser_prod.nit:1304 */
-  CALL_parser_prod___AAttrPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1305 */
+  /* ./parser//parser_prod.nit:1160 */
+  CALL_parser_prod___AMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1161 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1162 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1306 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -8217,19 +6263,17 @@ void parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1163 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1307 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1307);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1163);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1309 */
-  ATTR_parser_nodes___AAttrPropdef____n_readable(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1165 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1166 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1310 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8243,341 +6287,54 @@ void parser_prod___AAttrPropdef___init_aattrpropdef(val_t p0, val_t p1, val_t p2
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1167 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1311 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1311);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1167);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1313 */
-  ATTR_parser_nodes___AAttrPropdef____n_writable(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1314 */
+  /* ./parser//parser_prod.nit:1169 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1169);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1170 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1315 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1315);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1170);
   }
-  /* ./parser//parser_prod.nit:1317 */
-  ATTR_parser_nodes___AAttrPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1318 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1171 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1171);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1172 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1319 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1319);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1172);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1173 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1321 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1321);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1173);
   }
-  ATTR_parser_nodes___AAttrPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[5];
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1174 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1322 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1322);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1174);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1323 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1323);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAttrPropdef____n_kwvar(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1324 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1324);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[7]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1325 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1325);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAttrPropdef____n_id(fra.me.REG[0]) = fra.me.REG[7];
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1326 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1326);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1327 */
-  ATTR_parser_nodes___AAttrPropdef____n_type(fra.me.REG[0]) = fra.me.REG[8];
-  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1328 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1329 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1329);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:1331 */
-  ATTR_parser_nodes___AAttrPropdef____n_expr(fra.me.REG[0]) = fra.me.REG[9];
-  REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1332 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1333 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1333);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  init_table[itpos36] = 1;
-  return;
-}
-void parser_prod___AMethPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1482;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1484 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1485 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1486 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1486);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1489;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1491 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1492 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1493 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1493);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1496;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1498 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1499 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1499);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1501;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1503 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1504 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1504);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMethPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1506;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1508 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1509 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1509);
-    nit_exit(1);
-  }
-  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[itpos40] = 1;
   return;
 }
 void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -8587,7 +6344,7 @@ void parser_prod___AMethPropdef___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 = 1539;
+  fra.me.line = 1177;
   fra.me.meth = LOCATE_parser_prod___AMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -8598,9 +6355,9 @@ void parser_prod___AMethPropdef___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:1179 */
   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]));
-  /* ./parser//parser_prod.nit:1541 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -8613,8 +6370,8 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1180 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1542 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8628,34 +6385,30 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1181 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1543 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1543);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1181);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1182 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:1544 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1544);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1182);
       }
-      /* ./parser//parser_prod.nit:1545 */
+      /* ./parser//parser_prod.nit:1183 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1547 */
+      /* ./parser//parser_prod.nit:1185 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1549 */
+    /* ./parser//parser_prod.nit:1187 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1189 */
   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]));
-  /* ./parser//parser_prod.nit:1551 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -8668,8 +6421,8 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1190 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1552 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8683,34 +6436,30 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1191 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1553 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1553);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1191);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1192 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:1554 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1554);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1192);
       }
-      /* ./parser//parser_prod.nit:1555 */
+      /* ./parser//parser_prod.nit:1193 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1557 */
+      /* ./parser//parser_prod.nit:1195 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1559 */
+    /* ./parser//parser_prod.nit:1197 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1199 */
   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]));
-  /* ./parser//parser_prod.nit:1561 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -8723,8 +6472,8 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1200 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1562 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8738,36 +6487,30 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1201 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1563 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1563);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1201);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1202 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:1564 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1564);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1202);
       }
-      /* ./parser//parser_prod.nit:1565 */
+      /* ./parser//parser_prod.nit:1203 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1567 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1567);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1205 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1205);
     }
-    /* ./parser//parser_prod.nit:1569 */
+    /* ./parser//parser_prod.nit:1207 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1209 */
   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]));
-  /* ./parser//parser_prod.nit:1571 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -8780,8 +6523,8 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1210 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1572 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8795,36 +6538,30 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1211 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1573 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1573);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1211);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:1574 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1574);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1212);
       }
-      /* ./parser//parser_prod.nit:1575 */
+      /* ./parser//parser_prod.nit:1213 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1577 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1577);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1215 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1215);
     }
-    /* ./parser//parser_prod.nit:1579 */
+    /* ./parser//parser_prod.nit:1217 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1219 */
   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]));
-  /* ./parser//parser_prod.nit:1581 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -8837,8 +6574,8 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1220 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1582 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8852,31 +6589,25 @@ void parser_prod___AMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1221 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1583 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1583);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1221);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1222 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:1584 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1584);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1222);
       }
-      /* ./parser//parser_prod.nit:1585 */
+      /* ./parser//parser_prod.nit:1223 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1587 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1587);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1225 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1225);
     }
-    /* ./parser//parser_prod.nit:1589 */
+    /* ./parser//parser_prod.nit:1227 */
     goto label1;
   }
   label1: while(0);
@@ -8890,7 +6621,7 @@ void parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1593;
+  fra.me.line = 1231;
   fra.me.meth = LOCATE_parser_prod___AMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -8899,9 +6630,9 @@ void parser_prod___AMethPropdef___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:1233 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1595 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8915,20 +6646,18 @@ void parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1234 */
     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*/;
-    /* ./parser//parser_prod.nit:1596 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1596);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1234);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1236 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1598 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -8942,75 +6671,101 @@ void parser_prod___AMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1237 */
     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*/;
-    /* ./parser//parser_prod.nit:1599 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1599);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1237);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1239 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1601 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1240 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1602 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1241 */
   fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1603 */
   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___AMethPropdef___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___ADeferredMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos41]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 1245;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___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[itpos41] = 1;
+  return;
+}
+void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].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[itpos42]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1606;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___visit_all_reverse;
+  fra.me.line = 1247;
+  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1608 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:1256 */
+  CALL_parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1257 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1258 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1609 */
+    /* ./parser//parser_prod.nit:1259 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1609);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1259);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1261 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1262 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1611 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9024,368 +6779,67 @@ void parser_prod___AMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1612 */
+    /* ./parser//parser_prod.nit:1263 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1612);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1263);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1614 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1615 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1616 */
-  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___AMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos37]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1512;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___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:1512 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos37] = 1;
-  return;
-}
-void parser_prod___AMethPropdef___init_amethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, int* init_table){
-  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMethPropdef].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[itpos38]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1514;
-  fra.me.meth = LOCATE_parser_prod___AMethPropdef___init_amethpropdef;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:1522 */
-  CALL_parser_prod___AMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1523 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1524 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1525 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1525);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:1527 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1528 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1529 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1529);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:1265 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1531 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1531);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1265);
   }
   ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1266 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1532 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1532);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1266);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1267 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1533 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1533);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1267);
   }
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1268 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1534 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1534);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1268);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1269 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1535 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1535);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1269);
   }
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[5];
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1270 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1536 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1536);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1270);
   }
   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[itpos38] = 1;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1620;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1622 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1623 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1624 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1624);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1627;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1629 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1630 */
+  /* ./parser//parser_prod.nit:1271 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1631 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1631);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1634;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1636 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1637 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1637);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1644;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1646 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1647 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1647);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1271);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1649;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1651 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1652 */
+  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1272 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1652);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1272);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADeferredMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1639;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___n_kwmeth__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1641 */
-  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1642 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  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[itpos42] = 1;
   return;
 }
 void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -9395,7 +6849,7 @@ void parser_prod___ADeferredMethPropdef___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 = 1685;
+  fra.me.line = 1275;
   fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -9406,9 +6860,9 @@ void parser_prod___ADeferredMethPropdef___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:1277 */
   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]));
-  /* ./parser//parser_prod.nit:1687 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -9421,8 +6875,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1278 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1688 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9436,34 +6890,30 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1279 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1689 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1689);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1279);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1280 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:1690 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1690);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1280);
       }
-      /* ./parser//parser_prod.nit:1691 */
+      /* ./parser//parser_prod.nit:1281 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1693 */
+      /* ./parser//parser_prod.nit:1283 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1695 */
+    /* ./parser//parser_prod.nit:1285 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1287 */
   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]));
-  /* ./parser//parser_prod.nit:1697 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -9476,8 +6926,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1288 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1698 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9491,34 +6941,30 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1289 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1699 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1699);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1289);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1290 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:1700 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1700);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1290);
       }
-      /* ./parser//parser_prod.nit:1701 */
+      /* ./parser//parser_prod.nit:1291 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1703 */
+      /* ./parser//parser_prod.nit:1293 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1705 */
+    /* ./parser//parser_prod.nit:1295 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1297 */
   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]));
-  /* ./parser//parser_prod.nit:1707 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -9531,8 +6977,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1298 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1708 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9546,40 +6992,32 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1299 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1709 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1709);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1299);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1300 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:1710 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1710);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1300);
       }
-      /* ./parser//parser_prod.nit:1711 */
+      /* ./parser//parser_prod.nit:1301 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1713 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1713);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1303 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1303);
     }
-    /* ./parser//parser_prod.nit:1715 */
+    /* ./parser//parser_prod.nit:1305 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1307 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1717 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1717);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1307);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -9589,8 +7027,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1308 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1718 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9604,36 +7042,30 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1309 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1719 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1719);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1309);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1310 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      /* ./parser//parser_prod.nit:1720 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1720);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1310);
       }
-      /* ./parser//parser_prod.nit:1721 */
+      /* ./parser//parser_prod.nit:1311 */
       ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1723 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1723);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1313 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1313);
     }
-    /* ./parser//parser_prod.nit:1725 */
+    /* ./parser//parser_prod.nit:1315 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1317 */
   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]));
-  /* ./parser//parser_prod.nit:1727 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -9646,8 +7078,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1318 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1728 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9661,36 +7093,30 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1319 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1729 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1729);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1319);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1320 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:1730 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1730);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1320);
       }
-      /* ./parser//parser_prod.nit:1731 */
+      /* ./parser//parser_prod.nit:1321 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1733 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1733);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1323 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1323);
     }
-    /* ./parser//parser_prod.nit:1735 */
+    /* ./parser//parser_prod.nit:1325 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1327 */
   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]));
-  /* ./parser//parser_prod.nit:1737 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -9703,8 +7129,8 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1328 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1738 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9718,31 +7144,25 @@ void parser_prod___ADeferredMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1329 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1739 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1739);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1329);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1330 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:1740 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1740);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1330);
       }
-      /* ./parser//parser_prod.nit:1741 */
+      /* ./parser//parser_prod.nit:1331 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1743 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1743);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1333 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1333);
     }
-    /* ./parser//parser_prod.nit:1745 */
+    /* ./parser//parser_prod.nit:1335 */
     goto label1;
   }
   label1: while(0);
@@ -9756,7 +7176,7 @@ void parser_prod___ADeferredMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1749;
+  fra.me.line = 1339;
   fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -9765,101 +7185,9 @@ void parser_prod___ADeferredMethPropdef___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:1341 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1751 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1752 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1752);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1754 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1755 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1755);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1757 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1758 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1758);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1759 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1760 */
-  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___ADeferredMethPropdef___visit_all_reverse(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 = 1763;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1765 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9873,20 +7201,18 @@ void parser_prod___ADeferredMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1342 */
     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*/;
-    /* ./parser//parser_prod.nit:1766 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1766);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1342);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1344 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1768 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -9900,68 +7226,63 @@ void parser_prod___ADeferredMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1345 */
     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*/;
-    /* ./parser//parser_prod.nit:1769 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1769);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1345);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1347 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1771 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1348 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1772 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1772);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1348);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(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:1349 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1773 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1350 */
   fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1774 */
   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___ADeferredMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i;
+void parser_prod___AInternMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos39]) return;
+  if (init_table[itpos43]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1655;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___empty_init;
+  fra.me.line = 1354;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___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:1655 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos39] = 1;
+  init_table[itpos43] = 1;
   return;
 }
-void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
-  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADeferredMethPropdef].i;
+void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
+  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos40]) return;
+  if (init_table[itpos44]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1657;
-  fra.me.meth = LOCATE_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef;
+  fra.me.line = 1356;
+  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___init_ainternmethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
@@ -9978,12 +7299,12 @@ void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, va
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:1666 */
-  CALL_parser_prod___ADeferredMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1667 */
+  /* ./parser//parser_prod.nit:1365 */
+  CALL_parser_prod___AInternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1366 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1367 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1668 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -9997,19 +7318,17 @@ void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1368 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1669 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1669);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1368);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1671 */
+  /* ./parser//parser_prod.nit:1370 */
   ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1371 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1672 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10023,274 +7342,67 @@ void parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1372 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1673 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1673);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1372);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:1374 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1675 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1675);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1374);
   }
   ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1375 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1676 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1676);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1375);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1376 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1677 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1677);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1376);
   }
-  ATTR_parser_nodes___ADeferredMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1377 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1678 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1678);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1377);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1378 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1679 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1679);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1378);
   }
   ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1379 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1680 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1680);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1379);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1380 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1681 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1681);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1380);
   }
   ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1381 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1682 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1682);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1381);
   }
   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[itpos40] = 1;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1778;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1780 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1781 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1782 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1782);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1785;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1787 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1788 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1789 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1789);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1792;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1794 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1795 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1795);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1802;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1804 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1805 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1805);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1807;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1809 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1810 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1810);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInternMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1797;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___n_kwmeth__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1799 */
-  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1800 */
-  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[itpos44] = 1;
   return;
 }
 void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -10300,7 +7412,7 @@ void parser_prod___AInternMethPropdef___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 = 1843;
+  fra.me.line = 1384;
   fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -10311,9 +7423,9 @@ void parser_prod___AInternMethPropdef___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:1386 */
   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]));
-  /* ./parser//parser_prod.nit:1845 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -10326,8 +7438,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1387 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1846 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10341,34 +7453,30 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1388 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1847 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1847);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1388);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1389 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:1848 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1848);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1389);
       }
-      /* ./parser//parser_prod.nit:1849 */
+      /* ./parser//parser_prod.nit:1390 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1851 */
+      /* ./parser//parser_prod.nit:1392 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1853 */
+    /* ./parser//parser_prod.nit:1394 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1396 */
   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]));
-  /* ./parser//parser_prod.nit:1855 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -10381,8 +7489,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1397 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1856 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10396,34 +7504,30 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1398 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1857 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1857);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1398);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1399 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:1858 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1858);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1399);
       }
-      /* ./parser//parser_prod.nit:1859 */
+      /* ./parser//parser_prod.nit:1400 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1861 */
+      /* ./parser//parser_prod.nit:1402 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:1863 */
+    /* ./parser//parser_prod.nit:1404 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1406 */
   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]));
-  /* ./parser//parser_prod.nit:1865 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -10436,8 +7540,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1407 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1866 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10451,40 +7555,32 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1408 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1867 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1867);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1408);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1409 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:1868 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1868);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1409);
       }
-      /* ./parser//parser_prod.nit:1869 */
+      /* ./parser//parser_prod.nit:1410 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1871 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1871);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1412 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1412);
     }
-    /* ./parser//parser_prod.nit:1873 */
+    /* ./parser//parser_prod.nit:1414 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1416 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1875 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1875);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1416);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -10494,8 +7590,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1417 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1876 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10509,36 +7605,30 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1418 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1877 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1877);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1418);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1419 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      /* ./parser//parser_prod.nit:1878 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1878);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1419);
       }
-      /* ./parser//parser_prod.nit:1879 */
+      /* ./parser//parser_prod.nit:1420 */
       ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1881 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1881);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1422 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1422);
     }
-    /* ./parser//parser_prod.nit:1883 */
+    /* ./parser//parser_prod.nit:1424 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1426 */
   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]));
-  /* ./parser//parser_prod.nit:1885 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -10551,8 +7641,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1427 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1886 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10566,36 +7656,30 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1428 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1887 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1887);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1428);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1429 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:1888 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1888);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1429);
       }
-      /* ./parser//parser_prod.nit:1889 */
+      /* ./parser//parser_prod.nit:1430 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1891 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1891);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1432 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1432);
     }
-    /* ./parser//parser_prod.nit:1893 */
+    /* ./parser//parser_prod.nit:1434 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1436 */
   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]));
-  /* ./parser//parser_prod.nit:1895 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -10608,8 +7692,8 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1437 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1896 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10623,31 +7707,25 @@ void parser_prod___AInternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1438 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:1897 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1897);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1438);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1439 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:1898 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1898);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1439);
       }
-      /* ./parser//parser_prod.nit:1899 */
+      /* ./parser//parser_prod.nit:1440 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:1901 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1901);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1442 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1442);
     }
-    /* ./parser//parser_prod.nit:1903 */
+    /* ./parser//parser_prod.nit:1444 */
     goto label1;
   }
   label1: while(0);
@@ -10661,7 +7739,7 @@ void parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1907;
+  fra.me.line = 1448;
   fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -10670,9 +7748,9 @@ void parser_prod___AInternMethPropdef___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:1450 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1909 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10686,20 +7764,18 @@ void parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1451 */
     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*/;
-    /* ./parser//parser_prod.nit:1910 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1910);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1451);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1453 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1912 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10713,162 +7789,65 @@ void parser_prod___AInternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1454 */
     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*/;
-    /* ./parser//parser_prod.nit:1913 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1913);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1454);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1456 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1915 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1457 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1916 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1916);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1457);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(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:1458 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1917 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1459 */
   fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1918 */
   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___AInternMethPropdef___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___AExternMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  if (init_table[itpos45]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1921;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___visit_all_reverse;
+  fra.me.line = 1463;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1923 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1924 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1924);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1926 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:1927 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1927);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1929 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1930 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1930);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1931 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[0] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:1932 */
-  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___AInternMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos41]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1813;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___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:1813 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos41] = 1;
+  init_table[itpos45] = 1;
   return;
 }
-void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, int* init_table){
-  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInternMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, val_t p8, int* init_table){
+  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos42]) return;
+  if (init_table[itpos46]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1815;
-  fra.me.meth = LOCATE_parser_prod___AInternMethPropdef___init_ainternmethpropdef;
+  fra.me.line = 1465;
+  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___init_aexternmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10876,6 +7855,8 @@ void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t
   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;
@@ -10883,12 +7864,14 @@ void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:1824 */
-  CALL_parser_prod___AInternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1825 */
+  fra.me.REG[7] = p7;
+  fra.me.REG[8] = p8;
+  /* ./parser//parser_prod.nit:1476 */
+  CALL_parser_prod___AExternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1477 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1478 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1826 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -10902,19 +7885,17 @@ void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1479 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1827 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1827);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1479);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1829 */
+  /* ./parser//parser_prod.nit:1481 */
   ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1482 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1830 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -10928,318 +7909,115 @@ void parser_prod___AInternMethPropdef___init_ainternmethpropdef(val_t p0, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1483 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1831 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1831);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1483);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:1485 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1833 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1833);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1485);
   }
   ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1486 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1834 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1834);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1486);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1487 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1835 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1835);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1487);
   }
-  ATTR_parser_nodes___AInternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1488 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1836 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1836);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1488);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1489 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1837 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1837);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1489);
   }
   ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1490 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1838 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1838);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1490);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1491 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1839 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1839);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1491);
   }
   ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1492 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1840 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1840);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1492);
   }
   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[itpos42] = 1;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1936;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1938 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1939 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1940 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1940);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1943;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1945 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1946 */
+  /* ./parser//parser_prod.nit:1493 */
+  ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:1494 */
+  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1947 */
+    /* ./parser//parser_prod.nit:1495 */
+    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1947);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1495);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1950;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1952 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1953 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1953);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1960;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1962 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1963 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1963);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1965;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1967 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1968 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1968);
-    nit_exit(1);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1955;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_kwmeth__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1957 */
-  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:1958 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AExternMethPropdef___n_extern__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1970;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___n_extern__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:1972 */
-  ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1973 */
+  /* ./parser//parser_prod.nit:1497 */
+  ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[8];
+  /* ./parser//parser_prod.nit:1498 */
+  REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1974 */
+    /* ./parser//parser_prod.nit:1499 */
+    REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1974);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1499);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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[itpos46] = 1;
   return;
 }
 void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -11249,7 +8027,7 @@ void parser_prod___AExternMethPropdef___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 = 2013;
+  fra.me.line = 1503;
   fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -11260,9 +8038,9 @@ void parser_prod___AExternMethPropdef___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:1505 */
   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]));
-  /* ./parser//parser_prod.nit:2015 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11275,8 +8053,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1506 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2016 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11290,34 +8068,30 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1507 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2017 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2017);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1507);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1508 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:2018 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2018);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1508);
       }
-      /* ./parser//parser_prod.nit:2019 */
+      /* ./parser//parser_prod.nit:1509 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2021 */
+      /* ./parser//parser_prod.nit:1511 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2023 */
+    /* ./parser//parser_prod.nit:1513 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1515 */
   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]));
-  /* ./parser//parser_prod.nit:2025 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11330,8 +8104,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1516 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2026 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11345,34 +8119,30 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1517 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2027 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2027);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1517);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1518 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:2028 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2028);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1518);
       }
-      /* ./parser//parser_prod.nit:2029 */
+      /* ./parser//parser_prod.nit:1519 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2031 */
+      /* ./parser//parser_prod.nit:1521 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2033 */
+    /* ./parser//parser_prod.nit:1523 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1525 */
   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]));
-  /* ./parser//parser_prod.nit:2035 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11385,8 +8155,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1526 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2036 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11400,40 +8170,32 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1527 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2037 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2037);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1527);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1528 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:2038 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2038);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1528);
       }
-      /* ./parser//parser_prod.nit:2039 */
+      /* ./parser//parser_prod.nit:1529 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2041 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2041);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1531 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1531);
     }
-    /* ./parser//parser_prod.nit:2043 */
+    /* ./parser//parser_prod.nit:1533 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1535 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2045 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2045);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1535);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -11443,8 +8205,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1536 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2046 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11458,36 +8220,30 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1537 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2047 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2047);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1537);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1538 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      /* ./parser//parser_prod.nit:2048 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2048);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1538);
       }
-      /* ./parser//parser_prod.nit:2049 */
+      /* ./parser//parser_prod.nit:1539 */
       ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2051 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2051);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1541 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1541);
     }
-    /* ./parser//parser_prod.nit:2053 */
+    /* ./parser//parser_prod.nit:1543 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1545 */
   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]));
-  /* ./parser//parser_prod.nit:2055 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11500,8 +8256,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1546 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2056 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11515,36 +8271,30 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1547 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2057 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2057);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1547);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1548 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:2058 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2058);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1548);
       }
-      /* ./parser//parser_prod.nit:2059 */
+      /* ./parser//parser_prod.nit:1549 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2061 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2061);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1551 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1551);
     }
-    /* ./parser//parser_prod.nit:2063 */
+    /* ./parser//parser_prod.nit:1553 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1555 */
   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]));
-  /* ./parser//parser_prod.nit:2065 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11557,8 +8307,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1556 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2066 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11572,36 +8322,30 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1557 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2067 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2067);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1557);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1558 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:2068 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2068);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1558);
       }
-      /* ./parser//parser_prod.nit:2069 */
+      /* ./parser//parser_prod.nit:1559 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2071 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2071);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1561 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1561);
     }
-    /* ./parser//parser_prod.nit:2073 */
+    /* ./parser//parser_prod.nit:1563 */
     goto label1;
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1565 */
+  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]));
-  /* ./parser//parser_prod.nit:2075 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -11614,8 +8358,8 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1566 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2076 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11629,29 +8373,76 @@ void parser_prod___AExternMethPropdef___replace_child(val_t p0, val_t p1, val_t
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1567 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2077 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2077);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1567);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1568 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
-      /* ./parser//parser_prod.nit:2078 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2078);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1568);
+      }
+      /* ./parser//parser_prod.nit:1569 */
+      ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1571 */
+      ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1573 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:1575 */
+  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:1576 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:1577 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1577);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1578 */
+      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, 1578);
       }
-      /* ./parser//parser_prod.nit:2079 */
-      ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:1579 */
+      ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2081 */
-      ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = NIT_NULL;
+      /* ./parser//parser_prod.nit:1581 */
+      ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2083 */
+    /* ./parser//parser_prod.nit:1583 */
     goto label1;
   }
   label1: while(0);
@@ -11665,7 +8456,7 @@ void parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2087;
+  fra.me.line = 1587;
   fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -11674,9 +8465,9 @@ void parser_prod___AExternMethPropdef___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:1589 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2089 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11690,20 +8481,18 @@ void parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1590 */
     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*/;
-    /* ./parser//parser_prod.nit:2090 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2090);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1590);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1592 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2092 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11717,112 +8506,35 @@ void parser_prod___AExternMethPropdef___visit_all(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1593 */
     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*/;
-    /* ./parser//parser_prod.nit:2093 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2093);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1593);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1595 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2095 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1596 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2096 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2096);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwmeth", LOCATE_parser_prod, 1596);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(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:1597 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2097 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1598 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2098 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2099 */
-  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)) {
-    fra.me.REG[0] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TString, ID_TString)) /*cast TString*/;
-    /* ./parser//parser_prod.nit:2100 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2100);
-      nit_exit(1);
-    }
-    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___AExternMethPropdef___visit_all_reverse(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 = 2104;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2106 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2107 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2107);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1599 */
+  fra.me.REG[2] = ATTR_parser_nodes___AExternPropdef____n_extern(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2109 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11836,39 +8548,18 @@ void parser_prod___AExternMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2110 */
+    /* ./parser//parser_prod.nit:1600 */
+    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 {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2110);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1600);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2112 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2113 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwmeth");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2113);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2114 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2115 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1602 */
+  fra.me.REG[2] = ATTR_parser_nodes___AExternPropdef____n_extern_calls(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2116 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11882,49 +8573,46 @@ void parser_prod___AExternMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fra.me.REG[0] = ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_TString, ID_TString)) /*cast TString*/;
-    /* ./parser//parser_prod.nit:2117 */
+    /* ./parser//parser_prod.nit:1603 */
+    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 {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2117);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1603);
     }
     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___AExternMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+void parser_prod___AConcreteMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos43]) return;
+  if (init_table[itpos47]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1978;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___empty_init;
+  fra.me.line = 1608;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___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:1978 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos43] = 1;
+  init_table[itpos47] = 1;
   return;
 }
-void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
-  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternMethPropdef].i;
+void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos44]) return;
+  if (init_table[itpos48]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 1980;
-  fra.me.meth = LOCATE_parser_prod___AExternMethPropdef___init_aexternmethpropdef;
+  fra.me.line = 1610;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -11943,12 +8631,12 @@ void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* ./parser//parser_prod.nit:1990 */
-  CALL_parser_prod___AExternMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:1991 */
+  /* ./parser//parser_prod.nit:1620 */
+  CALL_parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1621 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1622 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1992 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -11962,19 +8650,17 @@ void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1623 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1993 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1993);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1623);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:1995 */
+  /* ./parser//parser_prod.nit:1625 */
   ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1626 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:1996 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -11988,87 +8674,69 @@ void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1627 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:1997 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1997);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1627);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:1629 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:1999 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 1999);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1629);
   }
   ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1630 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2000 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2000);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1630);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1631 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2001 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2001);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1631);
   }
-  ATTR_parser_nodes___AExternMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1632 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2002 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2002);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1632);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1633 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2003 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2003);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1633);
   }
   ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1634 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2004 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2004);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1634);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1635 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2005 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2005);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1635);
   }
   ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1636 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2006 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2006);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1636);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2007 */
-  ATTR_parser_nodes___AExternMethPropdef____n_extern(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:1637 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:1638 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2008 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
@@ -12082,390 +8750,140 @@ void parser_prod___AExternMethPropdef___init_aexternmethpropdef(val_t p0, val_t
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1639 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2009 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2009);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1639);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos44] = 1;
+  init_table[itpos48] = 1;
   return;
 }
-void parser_prod___AConcreteMethPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 2122;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_doc__eq;
+  fra.me.line = 1643;
+  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:2124 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2125 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:1645 */
+  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[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2126 */
+    /* ./parser//parser_prod.nit:1646 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2126);
-      nit_exit(1);
+    } 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;
+      }
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1647 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1647);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1648 */
+      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, 1648);
+      }
+      /* ./parser//parser_prod.nit:1649 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1651 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1653 */
+    goto label1;
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2129;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2131 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2132 */
+  /* ./parser//parser_prod.nit:1655 */
+  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[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2133 */
+    /* ./parser//parser_prod.nit:1656 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2133);
-      nit_exit(1);
+    } 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;
+      }
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2136;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2138 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2139 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2139);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2146;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2148 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2149 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2149);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2151;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2153 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2154 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2154);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_kwmeth__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2141;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_kwmeth__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2143 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2144 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2144);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2156;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2158 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2159 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2160 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2160);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 2199;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___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;
-  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]));
-  /* ./parser//parser_prod.nit:2201 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2202 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2203 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2203);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:2204 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2204);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:2205 */
-      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:2207 */
-      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:2209 */
-    goto label1;
-  }
-  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]));
-  /* ./parser//parser_prod.nit:2211 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2212 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2213 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2213);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:2214 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2214);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:2215 */
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:2217 */
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:2219 */
-    goto label1;
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1657 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1657);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1658 */
+      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, 1658);
+      }
+      /* ./parser//parser_prod.nit:1659 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1661 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1663 */
+    goto label1;
   }
+  /* ./parser//parser_prod.nit:1665 */
   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]));
-  /* ./parser//parser_prod.nit:2221 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -12478,8 +8896,8 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1666 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2222 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12493,36 +8911,30 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1667 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2223 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2223);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1667);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1668 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:2224 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2224);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1668);
       }
-      /* ./parser//parser_prod.nit:2225 */
+      /* ./parser//parser_prod.nit:1669 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2227 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2227);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1671 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1671);
     }
-    /* ./parser//parser_prod.nit:2229 */
+    /* ./parser//parser_prod.nit:1673 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1675 */
   fra.me.REG[3] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:2231 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -12535,8 +8947,8 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1676 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2232 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12550,36 +8962,30 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1677 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2233 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2233);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1677);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1678 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwmeth, ID_TKwmeth)) /*cast TKwmeth*/;
-      /* ./parser//parser_prod.nit:2234 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2234);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1678);
       }
-      /* ./parser//parser_prod.nit:2235 */
+      /* ./parser//parser_prod.nit:1679 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2237 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2237);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1681 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1681);
     }
-    /* ./parser//parser_prod.nit:2239 */
+    /* ./parser//parser_prod.nit:1683 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1685 */
   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]));
-  /* ./parser//parser_prod.nit:2241 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -12592,8 +8998,8 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1686 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2242 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12607,36 +9013,30 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1687 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2243 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2243);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1687);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1688 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:2244 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2244);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1688);
       }
-      /* ./parser//parser_prod.nit:2245 */
+      /* ./parser//parser_prod.nit:1689 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2247 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2247);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1691 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1691);
     }
-    /* ./parser//parser_prod.nit:2249 */
+    /* ./parser//parser_prod.nit:1693 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1695 */
   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]));
-  /* ./parser//parser_prod.nit:2251 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -12649,8 +9049,8 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1696 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2252 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12664,36 +9064,30 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1697 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2253 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2253);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1697);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1698 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:2254 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2254);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1698);
       }
-      /* ./parser//parser_prod.nit:2255 */
+      /* ./parser//parser_prod.nit:1699 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2257 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2257);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1701 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1701);
     }
-    /* ./parser//parser_prod.nit:2259 */
+    /* ./parser//parser_prod.nit:1703 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1705 */
   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]));
-  /* ./parser//parser_prod.nit:2261 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -12706,8 +9100,8 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1706 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2262 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12721,29 +9115,25 @@ void parser_prod___AConcreteMethPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1707 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2263 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2263);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1707);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1708 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:2264 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2264);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1708);
       }
-      /* ./parser//parser_prod.nit:2265 */
+      /* ./parser//parser_prod.nit:1709 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2267 */
+      /* ./parser//parser_prod.nit:1711 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2269 */
+    /* ./parser//parser_prod.nit:1713 */
     goto label1;
   }
   label1: while(0);
@@ -12757,7 +9147,7 @@ void parser_prod___AConcreteMethPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2273;
+  fra.me.line = 1717;
   fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -12766,121 +9156,9 @@ void parser_prod___AConcreteMethPropdef___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:1719 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2275 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2276 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2276);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2278 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2279 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2279);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2281 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2282 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2283 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2284 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2285 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2286 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2286);
-      nit_exit(1);
-    }
-    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___AConcreteMethPropdef___visit_all_reverse(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 = 2290;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2292 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12894,20 +9172,18 @@ void parser_prod___AConcreteMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1720 */
     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*/;
-    /* ./parser//parser_prod.nit:2293 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2293);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1720);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1722 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2295 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12921,32 +9197,30 @@ void parser_prod___AConcreteMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1723 */
     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*/;
-    /* ./parser//parser_prod.nit:2296 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2296);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1723);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1725 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2298 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1726 */
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2299 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1727 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2300 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1728 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2301 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1729 */
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2302 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -12960,49 +9234,46 @@ void parser_prod___AConcreteMethPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1730 */
     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*/;
-    /* ./parser//parser_prod.nit:2303 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2303);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1730);
     }
     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___AConcreteMethPropdef___empty_init(val_t p0, int* init_table){
-  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
+void parser_prod___AConcreteInitPropdef___empty_init(val_t p0, int* init_table){
+  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos45]) return;
+  if (init_table[itpos49]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2164;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___empty_init;
+  fra.me.line = 1735;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___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:2164 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos45] = 1;
+  init_table[itpos49] = 1;
   return;
 }
-void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
-  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteMethPropdef].i;
+void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
+  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos46]) return;
+  if (init_table[itpos50]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2166;
-  fra.me.meth = LOCATE_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef;
+  fra.me.line = 1737;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
   fra.me.REG[0] = NIT_NULL;
@@ -13021,12 +9292,12 @@ void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, va
   fra.me.REG[5] = p5;
   fra.me.REG[6] = p6;
   fra.me.REG[7] = p7;
-  /* ./parser//parser_prod.nit:2176 */
-  CALL_parser_prod___AConcreteMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2177 */
+  /* ./parser//parser_prod.nit:1747 */
+  CALL_parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1748 */
   ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1749 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2178 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -13040,19 +9311,17 @@ void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1750 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2179 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2179);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1750);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2181 */
+  /* ./parser//parser_prod.nit:1752 */
   ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1753 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2182 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -13066,87 +9335,80 @@ void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1754 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2183 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2183);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1754);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:1756 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2185 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2185);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1756);
   }
   ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1757 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2186 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2186);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1757);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1758 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2187 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2187);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1758);
   }
-  ATTR_parser_nodes___AConcreteMethPropdef____n_kwmeth(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1759 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2188 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2188);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1759);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2189 */
+  /* ./parser//parser_prod.nit:1760 */
+  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1761 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2189);
-    nit_exit(1);
+    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;
+    }
   }
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2190 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2190);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:1762 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1762);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1764 */
   REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2191 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2191);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1764);
   }
   ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1765 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2192 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2192);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1765);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2193 */
+  /* ./parser//parser_prod.nit:1766 */
   ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
+  /* ./parser//parser_prod.nit:1767 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2194 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
@@ -13160,461 +9422,193 @@ void parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1768 */
     REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2195 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2195);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1768);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
   }
   stack_frame_head = fra.me.prev;
-  init_table[itpos46] = 1;
+  init_table[itpos50] = 1;
   return;
 }
-void parser_prod___AConcreteInitPropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 2308;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_doc__eq;
+  fra.me.line = 1772;
+  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:2310 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2311 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:1774 */
+  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[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2312 */
+    /* ./parser//parser_prod.nit:1775 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2312);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1776 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1776);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1777 */
+      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, 1777);
+      }
+      /* ./parser//parser_prod.nit:1778 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1780 */
+      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:1782 */
+    goto label1;
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2315;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2317 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2318 */
+  /* ./parser//parser_prod.nit:1784 */
+  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[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2319 */
+    /* ./parser//parser_prod.nit:1785 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2319);
-      nit_exit(1);
+    } 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;
+      }
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2322;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2324 */
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2325 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2325);
-    nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1786 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1786);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1787 */
+      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, 1787);
+      }
+      /* ./parser//parser_prod.nit:1788 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:1790 */
+      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:1792 */
+    goto label1;
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_methid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2332;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_methid__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2334 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2335 */
+  /* ./parser//parser_prod.nit:1794 */
+  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[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2336 */
+    /* ./parser//parser_prod.nit:1795 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2336);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2339;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2341 */
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2342 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2342);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2344;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2346 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2347 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2348 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2348);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___n_kwinit__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2327;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___n_kwinit__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2329 */
-  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2330 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 2389;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___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;
-  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]));
-  /* ./parser//parser_prod.nit:2391 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2392 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2393 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2393);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:2394 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2394);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:2395 */
-      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:2397 */
-      ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:2399 */
-    goto label1;
-  }
-  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]));
-  /* ./parser//parser_prod.nit:2401 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2402 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2403 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2403);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:2404 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2404);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:2405 */
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:2407 */
-      ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:2409 */
-    goto label1;
-  }
-  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]));
-  /* ./parser//parser_prod.nit:2411 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2412 */
-    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;
-      }
+    } 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:1796 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2413 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2413);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1796);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1797 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:2414 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2414);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1797);
       }
-      /* ./parser//parser_prod.nit:2415 */
+      /* ./parser//parser_prod.nit:1798 */
       ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2417 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2417);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1800 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1800);
     }
-    /* ./parser//parser_prod.nit:2419 */
+    /* ./parser//parser_prod.nit:1802 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1804 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2421 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2421);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 1804);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
   REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
@@ -13624,8 +9618,8 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     REGB0 = REGB1;
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1805 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2422 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -13639,36 +9633,30 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1806 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2423 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2423);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1806);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1807 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
-      /* ./parser//parser_prod.nit:2424 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2424);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1807);
       }
-      /* ./parser//parser_prod.nit:2425 */
+      /* ./parser//parser_prod.nit:1808 */
       ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2427 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2427);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1810 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1810);
     }
-    /* ./parser//parser_prod.nit:2429 */
+    /* ./parser//parser_prod.nit:1812 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1814 */
   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]));
-  /* ./parser//parser_prod.nit:2431 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -13681,8 +9669,8 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1815 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2432 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -13696,34 +9684,30 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1816 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2433 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2433);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1816);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1817 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AMethid, ID_AMethid)) /*cast AMethid*/;
-      /* ./parser//parser_prod.nit:2434 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2434);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1817);
       }
-      /* ./parser//parser_prod.nit:2435 */
+      /* ./parser//parser_prod.nit:1818 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2437 */
+      /* ./parser//parser_prod.nit:1820 */
       ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2439 */
+    /* ./parser//parser_prod.nit:1822 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1824 */
   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]));
-  /* ./parser//parser_prod.nit:2441 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -13736,8 +9720,8 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1825 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2442 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -13751,36 +9735,30 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1826 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2443 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2443);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1826);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1827 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:2444 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2444);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1827);
       }
-      /* ./parser//parser_prod.nit:2445 */
+      /* ./parser//parser_prod.nit:1828 */
       ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2447 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2447);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1830 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1830);
     }
-    /* ./parser//parser_prod.nit:2449 */
+    /* ./parser//parser_prod.nit:1832 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1834 */
   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]));
-  /* ./parser//parser_prod.nit:2451 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -13793,8 +9771,8 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1835 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2452 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -13808,29 +9786,25 @@ void parser_prod___AConcreteInitPropdef___replace_child(val_t p0, val_t p1, val_
     }
     REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:1836 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2453 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2453);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1836);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1837 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:2454 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2454);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1837);
       }
-      /* ./parser//parser_prod.nit:2455 */
+      /* ./parser//parser_prod.nit:1838 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2457 */
+      /* ./parser//parser_prod.nit:1840 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2459 */
+    /* ./parser//parser_prod.nit:1842 */
     goto label1;
   }
   label1: while(0);
@@ -13844,7 +9818,7 @@ void parser_prod___AConcreteInitPropdef___visit_all(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2463;
+  fra.me.line = 1846;
   fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -13853,152 +9827,9 @@ void parser_prod___AConcreteInitPropdef___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:1848 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2465 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2466 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2466);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2468 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2469 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2469);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2471 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2472 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2472);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]);
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2473 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2474 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2474);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2476 */
-  CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2477 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2478 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2478);
-      nit_exit(1);
-    }
-    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___AConcreteInitPropdef___visit_all_reverse(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 = 2482;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2484 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14012,20 +9843,18 @@ void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1849 */
     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*/;
-    /* ./parser//parser_prod.nit:2485 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2485);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1849);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1851 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2487 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14039,33 +9868,29 @@ void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1852 */
     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*/;
-    /* ./parser//parser_prod.nit:2488 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2488);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1852);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1854 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2490 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1855 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2491 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2491);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 1855);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteInitPropdef____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:1856 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2492 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14079,23 +9904,21 @@ void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1857 */
     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*/;
-    /* ./parser//parser_prod.nit:2493 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2493);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1857);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1859 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2495 */
   CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* ./parser//parser_prod.nit:1860 */
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2496 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14109,73 +9932,60 @@ void parser_prod___AConcreteInitPropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1861 */
     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*/;
-    /* ./parser//parser_prod.nit:2497 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2497);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1861);
     }
     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___AConcreteInitPropdef___empty_init(val_t p0, int* init_table){
-  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
+void parser_prod___AMainMethPropdef___empty_init(val_t p0, int* init_table){
+  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos47]) return;
+  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 = 2352;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___empty_init;
+  fra.me.line = 1866;
+  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;
-  /* ./parser//parser_prod.nit:2352 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos47] = 1;
+  init_table[itpos51] = 1;
   return;
 }
-void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, val_t p1, val_t p2, val_t p3, val_t p4, val_t p5, val_t p6, val_t p7, int* init_table){
-  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AConcreteInitPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos48]) return;
+  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 = 2354;
-  fra.me.meth = LOCATE_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef;
+  fra.me.line = 1868;
+  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___init_amainmethpropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  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[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  fra.me.REG[6] = p6;
-  fra.me.REG[7] = p7;
-  /* ./parser//parser_prod.nit:2364 */
-  CALL_parser_prod___AConcreteInitPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2365 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1873 */
+  CALL_parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1874 */
+  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1875 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2366 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -14189,19 +9999,17 @@ void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1876 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2367 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2367);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1876);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2369 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1878 */
+  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1879 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2370 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14215,208 +10023,15 @@ void parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(val_t p0, va
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1880 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2371 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2371);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1880);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2373 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2373);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AMethPropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2374 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2374);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2375 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2375);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AConcreteInitPropdef____n_kwinit(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2376 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2376);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2377 */
-  ATTR_parser_nodes___AMethPropdef____n_methid(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2378 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2379 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2379);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2381 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2381);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AMethPropdef____n_signature(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2382 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2382);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:2383 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[7];
-  REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2384 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2385 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2385);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  init_table[itpos48] = 1;
-  return;
-}
-void parser_prod___AMainMethPropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2502;
-  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2504 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2505 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2506 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2506);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMainMethPropdef___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2509;
-  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2511 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2512 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2513 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2513);
-      nit_exit(1);
-    }
-    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[itpos52] = 1;
   return;
 }
 void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -14426,7 +10041,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 = 2535;
+  fra.me.line = 1884;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14437,9 +10052,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:2537 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -14452,8 +10067,8 @@ void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1887 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2538 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14467,34 +10082,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2539 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2539);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1888);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1889 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:2540 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2540);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1889);
       }
-      /* ./parser//parser_prod.nit:2541 */
+      /* ./parser//parser_prod.nit:1890 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2543 */
+      /* ./parser//parser_prod.nit:1892 */
       ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2545 */
+    /* ./parser//parser_prod.nit:1894 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1896 */
   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]));
-  /* ./parser//parser_prod.nit:2547 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -14507,8 +10118,8 @@ void parser_prod___AMainMethPropdef___replace_child(val_t p0, val_t p1, val_t p2
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1897 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2548 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14522,29 +10133,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2549 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2549);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1898);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1899 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:2550 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2550);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1899);
       }
-      /* ./parser//parser_prod.nit:2551 */
+      /* ./parser//parser_prod.nit:1900 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2553 */
+      /* ./parser//parser_prod.nit:1902 */
       ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2555 */
+    /* ./parser//parser_prod.nit:1904 */
     goto label1;
   }
   label1: while(0);
@@ -14558,7 +10165,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 = 2559;
+  fra.me.line = 1908;
   fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -14567,9 +10174,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2561 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14583,20 +10190,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:2562 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2562);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1911);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:1913 */
   fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2564 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14610,136 +10215,68 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:2565 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2565);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1914);
     }
     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___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table){
+  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 2569;
-  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___visit_all_reverse;
+  fra.me.line = 1919;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2571 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2572 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2572);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2574 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2575 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2575);
-      nit_exit(1);
-    }
-    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 itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos49]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2517;
-  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;
-  /* ./parser//parser_prod.nit:2517 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos49] = 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 itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMainMethPropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos50]) 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 = 2519;
-  fra.me.meth = LOCATE_parser_prod___AMainMethPropdef___init_amainmethpropdef;
+  fra.me.line = 1921;
+  fra.me.meth = LOCATE_parser_prod___ATypePropdef___init_atypepropdef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2524 */
-  CALL_parser_prod___AMainMethPropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2525 */
-  ATTR_parser_nodes___AMethPropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:1930 */
+  CALL_parser_prod___ATypePropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:1931 */
+  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:1932 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2526 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -14753,19 +10290,17 @@ 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:1933 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2527 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2527);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1933);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2529 */
-  ATTR_parser_nodes___AConcreteMethPropdef____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1935 */
+  ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:1936 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2530 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -14779,185 +10314,67 @@ 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:1937 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2531 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2531);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1937);
     }
     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[itpos50] = 1;
-  return;
-}
-void parser_prod___ATypePropdef___n_doc__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2580;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_doc__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2582 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2583 */
+  /* ./parser//parser_prod.nit:1939 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1939);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:1940 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2584 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2584);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1940);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2587;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2589 */
-  ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2590 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1941 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1941);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:1942 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2591 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2591);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1942);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1943 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1943);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:1944 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1944);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:1945 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 1945);
+  }
+  ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:1946 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1946);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_visibility__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2594;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_visibility__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2596 */
-  ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2597 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_kwtype__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2599;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_kwtype__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2601 */
-  ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2602 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2604;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2606 */
-  ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2607 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2609;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2611 */
-  ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2612 */
-  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[itpos54] = 1;
   return;
 }
 void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
@@ -14967,7 +10384,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 = 2645;
+  fra.me.line = 1949;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -14978,9 +10395,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:2647 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -14993,8 +10410,8 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1952 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2648 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15008,34 +10425,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2649 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2649);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1953);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1954 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ADoc, ID_ADoc)) /*cast ADoc*/;
-      /* ./parser//parser_prod.nit:2650 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2650);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1954);
       }
-      /* ./parser//parser_prod.nit:2651 */
+      /* ./parser//parser_prod.nit:1955 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2653 */
+      /* ./parser//parser_prod.nit:1957 */
       ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2655 */
+    /* ./parser//parser_prod.nit:1959 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1961 */
   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]));
-  /* ./parser//parser_prod.nit:2657 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -15048,8 +10461,8 @@ void parser_prod___ATypePropdef___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:1962 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2658 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15063,38 +10476,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2659 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2659);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1963);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1964 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:2660 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2660);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1964);
       }
-      /* ./parser//parser_prod.nit:2661 */
+      /* ./parser//parser_prod.nit:1965 */
       ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2663 */
+      /* ./parser//parser_prod.nit:1967 */
       ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2665 */
+    /* ./parser//parser_prod.nit:1969 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1971 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2667 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2667);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 1971);
   }
   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]));
@@ -15104,8 +10511,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2668 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15119,40 +10526,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2669 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2669);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1973);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1974 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AVisibility, ID_AVisibility)) /*cast AVisibility*/;
-      /* ./parser//parser_prod.nit:2670 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2670);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1974);
       }
-      /* ./parser//parser_prod.nit:2671 */
+      /* ./parser//parser_prod.nit:1975 */
       ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2673 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2673);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1977 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1977);
     }
-    /* ./parser//parser_prod.nit:2675 */
+    /* ./parser//parser_prod.nit:1979 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1981 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2677 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2677);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser_prod, 1981);
   }
   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]));
@@ -15162,8 +10561,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2678 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15177,40 +10576,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2679 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2679);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1983);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1984 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtype, ID_TKwtype)) /*cast TKwtype*/;
-      /* ./parser//parser_prod.nit:2680 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2680);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1984);
       }
-      /* ./parser//parser_prod.nit:2681 */
+      /* ./parser//parser_prod.nit:1985 */
       ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2683 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2683);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1987 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1987);
     }
-    /* ./parser//parser_prod.nit:2685 */
+    /* ./parser//parser_prod.nit:1989 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:1991 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2687 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2687);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 1991);
   }
   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]));
@@ -15220,8 +10611,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2688 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15235,40 +10626,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2689 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2689);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 1993);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:1994 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      /* ./parser//parser_prod.nit:2690 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2690);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 1994);
       }
-      /* ./parser//parser_prod.nit:2691 */
+      /* ./parser//parser_prod.nit:1995 */
       ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2693 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2693);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:1997 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 1997);
     }
-    /* ./parser//parser_prod.nit:2695 */
+    /* ./parser//parser_prod.nit:1999 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2001 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2697 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2697);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 2001);
   }
   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]));
@@ -15278,8 +10661,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2698 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15293,31 +10676,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2699 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2699);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2003);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2004 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:2700 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2700);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2004);
       }
-      /* ./parser//parser_prod.nit:2701 */
+      /* ./parser//parser_prod.nit:2005 */
       ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2703 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2703);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2007 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2007);
     }
-    /* ./parser//parser_prod.nit:2705 */
+    /* ./parser//parser_prod.nit:2009 */
     goto label1;
   }
   label1: while(0);
@@ -15331,7 +10708,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 = 2709;
+  fra.me.line = 2013;
   fra.me.meth = LOCATE_parser_prod___ATypePropdef___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15340,122 +10717,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2711 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2712 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2712);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2714 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2715 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2715);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2717 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2717);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2718 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2718);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2719 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2719);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2720 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2720);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATypePropdef___visit_all_reverse(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 = 2723;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2725 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15469,20 +10733,18 @@ void parser_prod___ATypePropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2016 */
     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*/;
-    /* ./parser//parser_prod.nit:2726 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2726);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2016);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2018 */
   fra.me.REG[2] = ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2728 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15496,111 +10758,92 @@ void parser_prod___ATypePropdef___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2019 */
     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*/;
-    /* ./parser//parser_prod.nit:2729 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2729);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2019);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2021 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2731 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_visibility");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2731);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_visibility", LOCATE_parser_prod, 2021);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2732 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtype");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2732);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwtype", LOCATE_parser_prod, 2022);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2733 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2733);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2023);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2734 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2734);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 2024);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ATypePropdef___empty_init(val_t p0, int* init_table){
-  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
+void parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
+  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos51]) 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 = 2615;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___empty_init;
+  fra.me.line = 2028;
+  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;
-  /* ./parser//parser_prod.nit:2615 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 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 itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATypePropdef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+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;
+  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[itpos56]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2617;
-  fra.me.meth = LOCATE_parser_prod___ATypePropdef___init_atypepropdef;
+  fra.me.line = 2030;
+  fra.me.meth = LOCATE_parser_prod___AReadAble___init_areadable;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  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[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:2626 */
-  CALL_parser_prod___ATypePropdef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2627 */
-  ATTR_parser_nodes___APropdef____n_doc(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2035 */
+  CALL_parser_prod___AReadAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2036 */
+  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2037 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2628 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -15614,175 +10857,28 @@ 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:2038 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2629 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2629);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2038);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:2631 */
-  ATTR_parser_nodes___ATypePropdef____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2632 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2633 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2633);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2635 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2635);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ATypePropdef____n_visibility(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2636 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2636);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2637 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2637);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ATypePropdef____n_kwtype(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2638 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2638);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2639 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2639);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ATypePropdef____n_id(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2640 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2640);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2641 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2641);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ATypePropdef____n_type(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2642 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2642);
-    nit_exit(1);
-  }
-  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[itpos52] = 1;
-  return;
-}
-void parser_prod___AReadAble___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2738;
-  fra.me.meth = LOCATE_parser_prod___AReadAble___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2740 */
-  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2741 */
+  /* ./parser//parser_prod.nit:2040 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2040);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2041 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2742 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2742);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2041);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AReadAble___n_kwreadable__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2745;
-  fra.me.meth = LOCATE_parser_prod___AReadAble___n_kwreadable__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2747 */
-  ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2748 */
-  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[itpos56] = 1;
   return;
 }
 void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
@@ -15792,7 +10888,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 = 2767;
+  fra.me.line = 2044;
   fra.me.meth = LOCATE_parser_prod___AReadAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -15803,9 +10899,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:2769 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -15818,8 +10914,8 @@ void parser_prod___AReadAble___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2047 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2770 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15833,38 +10929,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2771 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2771);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2048);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2049 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:2772 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2772);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2049);
       }
-      /* ./parser//parser_prod.nit:2773 */
+      /* ./parser//parser_prod.nit:2050 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2775 */
+      /* ./parser//parser_prod.nit:2052 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2777 */
+    /* ./parser//parser_prod.nit:2054 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2056 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2779 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2779);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser_prod, 2056);
   }
   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]));
@@ -15874,8 +10964,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2780 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15889,31 +10979,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2781 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2781);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2058);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2059 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreadable, ID_TKwreadable)) /*cast TKwreadable*/;
-      /* ./parser//parser_prod.nit:2782 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2782);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2059);
       }
-      /* ./parser//parser_prod.nit:2783 */
+      /* ./parser//parser_prod.nit:2060 */
       ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2785 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2785);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2062 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2062);
     }
-    /* ./parser//parser_prod.nit:2787 */
+    /* ./parser//parser_prod.nit:2064 */
     goto label1;
   }
   label1: while(0);
@@ -15927,7 +11011,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 = 2791;
+  fra.me.line = 2068;
   fra.me.meth = LOCATE_parser_prod___AReadAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -15936,9 +11020,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2793 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -15952,129 +11036,70 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:2794 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2794);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2071);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2073 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2796 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2796);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwreadable", LOCATE_parser_prod, 2073);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AReadAble___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
+  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 2077;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
+  if (init_table[itpos58]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2799;
-  fra.me.meth = LOCATE_parser_prod___AReadAble___visit_all_reverse;
+  fra.me.line = 2079;
+  fra.me.meth = LOCATE_parser_prod___AWriteAble___init_awriteable;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2801 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2802 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2802);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2804 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwreadable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2804);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AReadAble___empty_init(val_t p0, int* init_table){
-  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReadAble].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 2751;
-  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;
-  /* ./parser//parser_prod.nit:2751 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
-  return;
-}
-void parser_prod___AReadAble___init_areadable(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos54 = 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[itpos54]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2753;
-  fra.me.meth = LOCATE_parser_prod___AReadAble___init_areadable;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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:2758 */
-  CALL_parser_prod___AReadAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2759 */
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:2085 */
+  CALL_parser_prod___AWriteAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2086 */
   ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2087 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2760 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -16088,98 +11113,52 @@ 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:2088 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2761 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2761);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2088);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2763 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2763);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReadAble____n_kwreadable(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2090 */
+  ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2091 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2764 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2764);
-    nit_exit(1);
-  }
-  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[itpos54] = 1;
-  return;
-}
-void parser_prod___AWriteAble___n_kwredef__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2808;
-  fra.me.meth = LOCATE_parser_prod___AWriteAble___n_kwredef__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2810 */
-  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2811 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2812 */
+    /* ./parser//parser_prod.nit:2092 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2812);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2092);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:2094 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2094);
+  }
+  ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:2095 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2095);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWriteAble___n_kwwritable__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2815;
-  fra.me.meth = LOCATE_parser_prod___AWriteAble___n_kwwritable__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2817 */
-  ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2818 */
-  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[itpos58] = 1;
   return;
 }
 void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16189,7 +11168,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 = 2837;
+  fra.me.line = 2098;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16200,9 +11179,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:2839 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -16215,8 +11194,8 @@ void parser_prod___AWriteAble___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2101 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2840 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16230,38 +11209,83 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2841 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2841);
-        nit_exit(1);
+        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:2103 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwredef, ID_TKwredef)) /*cast TKwredef*/;
-      /* ./parser//parser_prod.nit:2842 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2842);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2103);
       }
-      /* ./parser//parser_prod.nit:2843 */
+      /* ./parser//parser_prod.nit:2104 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2845 */
+      /* ./parser//parser_prod.nit:2106 */
       ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:2847 */
+    /* ./parser//parser_prod.nit:2108 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:2110 */
+  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)) {
+  } 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:2111 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:2112 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        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:2113 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:2114 */
+      ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:2116 */
+      ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:2118 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2120 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2849 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2849);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser_prod, 2120);
   }
   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]));
@@ -16271,8 +11295,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2850 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16286,31 +11310,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2851 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2851);
-        nit_exit(1);
+        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:2123 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwritable, ID_TKwwritable)) /*cast TKwwritable*/;
-      /* ./parser//parser_prod.nit:2852 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2852);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2123);
       }
-      /* ./parser//parser_prod.nit:2853 */
+      /* ./parser//parser_prod.nit:2124 */
       ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2855 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2855);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2126 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2126);
     }
-    /* ./parser//parser_prod.nit:2857 */
+    /* ./parser//parser_prod.nit:2128 */
     goto label1;
   }
   label1: while(0);
@@ -16324,7 +11342,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 = 2861;
+  fra.me.line = 2132;
   fra.me.meth = LOCATE_parser_prod___AWriteAble___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -16333,9 +11351,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2863 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16349,49 +11367,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:2864 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2864);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2135);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2866 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2866);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWriteAble___visit_all_reverse(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 = 2869;
-  fra.me.meth = LOCATE_parser_prod___AWriteAble___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2137 */
+  fra.me.REG[2] = ATTR_parser_nodes___AAble____n_visibility(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2871 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16405,134 +11392,76 @@ void parser_prod___AWriteAble___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:2872 */
+    /* ./parser//parser_prod.nit:2138 */
+    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 {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2872);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2138);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2140 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2874 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwritable");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2874);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwwritable", LOCATE_parser_prod, 2140);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AWriteAble___empty_init(val_t p0, int* init_table){
-  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
+void parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
+  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos55]) 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 = 2821;
-  fra.me.meth = LOCATE_parser_prod___AWriteAble___empty_init;
+  fra.me.line = 2144;
+  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;
-  /* ./parser//parser_prod.nit:2821 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
+  init_table[itpos59] = 1;
   return;
 }
-void parser_prod___AWriteAble___init_awriteable(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWriteAble].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos56]) 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 = 2823;
-  fra.me.meth = LOCATE_parser_prod___AWriteAble___init_awriteable;
+  fra.me.line = 2146;
+  fra.me.meth = LOCATE_parser_prod___AIdMethid___init_aidmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:2828 */
-  CALL_parser_prod___AWriteAble___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:2829 */
-  ATTR_parser_nodes___AAble____n_kwredef(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2830 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2831 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2831);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2833 */
+  /* ./parser//parser_prod.nit:2150 */
+  CALL_parser_prod___AIdMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2151 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2833);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2151);
   }
-  ATTR_parser_nodes___AWriteAble____n_kwwritable(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2834 */
+  ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2152 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2834);
-    nit_exit(1);
+    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]);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
-  return;
-}
-void parser_prod___AIdMethid___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2878;
-  fra.me.meth = LOCATE_parser_prod___AIdMethid___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2880 */
-  ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2881 */
   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;
   return;
 }
 void parser_prod___AIdMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16542,7 +11471,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 = 2895;
+  fra.me.line = 2155;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16553,13 +11482,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2897 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2897);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2157);
   }
   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]));
@@ -16569,8 +11496,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2898 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16584,31 +11511,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2899 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2899);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2159);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2160 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:2900 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2900);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2160);
       }
-      /* ./parser//parser_prod.nit:2901 */
+      /* ./parser//parser_prod.nit:2161 */
       ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2903 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2903);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2163 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2163);
     }
-    /* ./parser//parser_prod.nit:2905 */
+    /* ./parser//parser_prod.nit:2165 */
     goto label1;
   }
   label1: while(0);
@@ -16621,7 +11542,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 = 2909;
+  fra.me.line = 2169;
   fra.me.meth = LOCATE_parser_prod___AIdMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16629,121 +11550,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2911 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2911);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIdMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2914;
-  fra.me.meth = LOCATE_parser_prod___AIdMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2916 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2916);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2171);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIdMethid___empty_init(val_t p0, int* init_table){
-  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+void parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
+  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos57]) 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 = 2884;
-  fra.me.meth = LOCATE_parser_prod___AIdMethid___empty_init;
+  fra.me.line = 2175;
+  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;
-  /* ./parser//parser_prod.nit:2884 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
+  init_table[itpos61] = 1;
   return;
 }
-void parser_prod___AIdMethid___init_aidmethid(val_t p0, val_t p1, int* init_table){
-  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIdMethid].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos58]) 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 = 2886;
-  fra.me.meth = LOCATE_parser_prod___AIdMethid___init_aidmethid;
+  fra.me.line = 2177;
+  fra.me.meth = LOCATE_parser_prod___APlusMethid___init_aplusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2890 */
-  CALL_parser_prod___AIdMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2181 */
+  CALL_parser_prod___APlusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2182 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2891 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2891);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2182);
   }
-  ATTR_parser_nodes___AIdMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2183 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2892 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2892);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2183);
   }
   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[itpos58] = 1;
-  return;
-}
-void parser_prod___APlusMethid___n_plus__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2920;
-  fra.me.meth = LOCATE_parser_prod___APlusMethid___n_plus__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2922 */
-  ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2923 */
-  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;
   return;
 }
 void parser_prod___APlusMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16753,7 +11620,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 = 2937;
+  fra.me.line = 2186;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16764,13 +11631,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2939 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2939);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser_prod, 2188);
   }
   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]));
@@ -16780,8 +11645,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2940 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -16795,31 +11660,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2941 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2941);
-        nit_exit(1);
+        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]);
+      /* ./parser//parser_prod.nit:2191 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPlus, ID_TPlus)) /*cast TPlus*/;
-      /* ./parser//parser_prod.nit:2942 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2942);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2191);
       }
-      /* ./parser//parser_prod.nit:2943 */
+      /* ./parser//parser_prod.nit:2192 */
       ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2945 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2945);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2194 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2194);
     }
-    /* ./parser//parser_prod.nit:2947 */
+    /* ./parser//parser_prod.nit:2196 */
     goto label1;
   }
   label1: while(0);
@@ -16832,7 +11691,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 = 2951;
+  fra.me.line = 2200;
   fra.me.meth = LOCATE_parser_prod___APlusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -16840,121 +11699,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2953 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2953);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APlusMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2956;
-  fra.me.meth = LOCATE_parser_prod___APlusMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2958 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_plus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2958);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_plus", LOCATE_parser_prod, 2202);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APlusMethid___empty_init(val_t p0, int* init_table){
-  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+void parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table){
+  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos59]) 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 = 2926;
-  fra.me.meth = LOCATE_parser_prod___APlusMethid___empty_init;
+  fra.me.line = 2206;
+  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;
-  /* ./parser//parser_prod.nit:2926 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
+  init_table[itpos63] = 1;
   return;
 }
-void parser_prod___APlusMethid___init_aplusmethid(val_t p0, val_t p1, int* init_table){
-  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusMethid].i;
+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;
   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[itpos64]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2928;
-  fra.me.meth = LOCATE_parser_prod___APlusMethid___init_aplusmethid;
+  fra.me.line = 2208;
+  fra.me.meth = LOCATE_parser_prod___AMinusMethid___init_aminusmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2932 */
-  CALL_parser_prod___APlusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2212 */
+  CALL_parser_prod___AMinusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2213 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2933 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2933);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2213);
   }
-  ATTR_parser_nodes___APlusMethid____n_plus(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2214 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2934 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2934);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2214);
   }
   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;
-  return;
-}
-void parser_prod___AMinusMethid___n_minus__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2962;
-  fra.me.meth = LOCATE_parser_prod___AMinusMethid___n_minus__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2964 */
-  ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:2965 */
-  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;
   return;
 }
 void parser_prod___AMinusMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -16964,7 +11769,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 = 2979;
+  fra.me.line = 2217;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -16975,13 +11780,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2981 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2981);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 2219);
   }
   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]));
@@ -16991,8 +11794,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:2982 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -17006,31 +11809,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:2983 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2983);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2221);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2222 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
-      /* ./parser//parser_prod.nit:2984 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2984);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2222);
       }
-      /* ./parser//parser_prod.nit:2985 */
+      /* ./parser//parser_prod.nit:2223 */
       ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:2987 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2987);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2225 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2225);
     }
-    /* ./parser//parser_prod.nit:2989 */
+    /* ./parser//parser_prod.nit:2227 */
     goto label1;
   }
   label1: while(0);
@@ -17043,7 +11840,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 = 2993;
+  fra.me.line = 2231;
   fra.me.meth = LOCATE_parser_prod___AMinusMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17051,121 +11848,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2995 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2995);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMinusMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2998;
-  fra.me.meth = LOCATE_parser_prod___AMinusMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3000 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3000);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 2233);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AMinusMethid___empty_init(val_t p0, int* init_table){
-  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+void parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
+  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos61]) 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 = 2968;
-  fra.me.meth = LOCATE_parser_prod___AMinusMethid___empty_init;
+  fra.me.line = 2237;
+  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;
-  /* ./parser//parser_prod.nit:2968 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
+  init_table[itpos65] = 1;
   return;
 }
-void parser_prod___AMinusMethid___init_aminusmethid(val_t p0, val_t p1, int* init_table){
-  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusMethid].i;
+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;
   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[itpos66]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 2970;
-  fra.me.meth = LOCATE_parser_prod___AMinusMethid___init_aminusmethid;
+  fra.me.line = 2239;
+  fra.me.meth = LOCATE_parser_prod___AStarMethid___init_astarmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:2974 */
-  CALL_parser_prod___AMinusMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2243 */
+  CALL_parser_prod___AStarMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2244 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:2975 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2975);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2244);
   }
-  ATTR_parser_nodes___AMinusMethid____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2245 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:2976 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 2976);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2245);
   }
   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;
-  return;
-}
-void parser_prod___AStarMethid___n_star__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3004;
-  fra.me.meth = LOCATE_parser_prod___AStarMethid___n_star__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3006 */
-  ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3007 */
-  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;
   return;
 }
 void parser_prod___AStarMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17175,7 +11918,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 = 3021;
+  fra.me.line = 2248;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17186,13 +11929,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3023 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3023);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser_prod, 2250);
   }
   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]));
@@ -17202,8 +11943,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3024 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -17217,31 +11958,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3025 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3025);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2252);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2253 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStar, ID_TStar)) /*cast TStar*/;
-      /* ./parser//parser_prod.nit:3026 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3026);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2253);
       }
-      /* ./parser//parser_prod.nit:3027 */
+      /* ./parser//parser_prod.nit:2254 */
       ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3029 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3029);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2256 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2256);
     }
-    /* ./parser//parser_prod.nit:3031 */
+    /* ./parser//parser_prod.nit:2258 */
     goto label1;
   }
   label1: while(0);
@@ -17254,7 +11989,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 = 3035;
+  fra.me.line = 2262;
   fra.me.meth = LOCATE_parser_prod___AStarMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17262,121 +11997,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3037 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3037);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3040;
-  fra.me.meth = LOCATE_parser_prod___AStarMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3042 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_star");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3042);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_star", LOCATE_parser_prod, 2264);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarMethid___empty_init(val_t p0, int* init_table){
-  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+void parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table){
+  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos63]) 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 = 3010;
-  fra.me.meth = LOCATE_parser_prod___AStarMethid___empty_init;
+  fra.me.line = 2268;
+  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;
-  /* ./parser//parser_prod.nit:3010 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
+  init_table[itpos67] = 1;
   return;
 }
-void parser_prod___AStarMethid___init_astarmethid(val_t p0, val_t p1, int* init_table){
-  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarMethid].i;
+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;
   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[itpos68]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3012;
-  fra.me.meth = LOCATE_parser_prod___AStarMethid___init_astarmethid;
+  fra.me.line = 2270;
+  fra.me.meth = LOCATE_parser_prod___ASlashMethid___init_aslashmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3016 */
-  CALL_parser_prod___AStarMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2274 */
+  CALL_parser_prod___ASlashMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2275 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3017 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3017);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2275);
   }
-  ATTR_parser_nodes___AStarMethid____n_star(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2276 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3018 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3018);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2276);
   }
   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;
-  return;
-}
-void parser_prod___ASlashMethid___n_slash__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3046;
-  fra.me.meth = LOCATE_parser_prod___ASlashMethid___n_slash__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3048 */
-  ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3049 */
-  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;
   return;
 }
 void parser_prod___ASlashMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17386,7 +12067,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 = 3063;
+  fra.me.line = 2279;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17397,13 +12078,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3065 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3065);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser_prod, 2281);
   }
   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]));
@@ -17413,8 +12092,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3066 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -17428,31 +12107,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3067 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3067);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2283);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2284 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TSlash, ID_TSlash)) /*cast TSlash*/;
-      /* ./parser//parser_prod.nit:3068 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3068);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2284);
       }
-      /* ./parser//parser_prod.nit:3069 */
+      /* ./parser//parser_prod.nit:2285 */
       ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3071 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3071);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2287 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2287);
     }
-    /* ./parser//parser_prod.nit:3073 */
+    /* ./parser//parser_prod.nit:2289 */
     goto label1;
   }
   label1: while(0);
@@ -17465,7 +12138,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 = 3077;
+  fra.me.line = 2293;
   fra.me.meth = LOCATE_parser_prod___ASlashMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17473,121 +12146,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3079 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3079);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_slash", LOCATE_parser_prod, 2295);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASlashMethid___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___APercentMethid___empty_init(val_t p0, int* init_table){
+  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 2299;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos70]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3082;
-  fra.me.meth = LOCATE_parser_prod___ASlashMethid___visit_all_reverse;
+  fra.me.line = 2301;
+  fra.me.meth = LOCATE_parser_prod___APercentMethid___init_apercentmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3084 */
+  /* ./parser//parser_prod.nit:2305 */
+  CALL_parser_prod___APercentMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2306 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_slash");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3084);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2306);
   }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASlashMethid___empty_init(val_t p0, int* init_table){
-  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashMethid].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 3052;
-  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;
-  /* ./parser//parser_prod.nit:3052 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
-  return;
-}
-void parser_prod___ASlashMethid___init_aslashmethid(val_t p0, val_t p1, int* init_table){
-  int itpos66 = 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[itpos66]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3054;
-  fra.me.meth = LOCATE_parser_prod___ASlashMethid___init_aslashmethid;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3058 */
-  CALL_parser_prod___ASlashMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3059);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ASlashMethid____n_slash(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2307 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3060 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3060);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2307);
   }
   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;
-  return;
-}
-void parser_prod___APercentMethid___n_percent__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3088;
-  fra.me.meth = LOCATE_parser_prod___APercentMethid___n_percent__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3090 */
-  ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3091 */
-  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;
   return;
 }
 void parser_prod___APercentMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17597,7 +12216,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 = 3105;
+  fra.me.line = 2310;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17608,13 +12227,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3107 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3107);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser_prod, 2312);
   }
   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]));
@@ -17624,8 +12241,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3108 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -17639,31 +12256,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3109 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3109);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2314);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2315 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPercent, ID_TPercent)) /*cast TPercent*/;
-      /* ./parser//parser_prod.nit:3110 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3110);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2315);
       }
-      /* ./parser//parser_prod.nit:3111 */
+      /* ./parser//parser_prod.nit:2316 */
       ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3113 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3113);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2318 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2318);
     }
-    /* ./parser//parser_prod.nit:3115 */
+    /* ./parser//parser_prod.nit:2320 */
     goto label1;
   }
   label1: while(0);
@@ -17676,7 +12287,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 = 3119;
+  fra.me.line = 2324;
   fra.me.meth = LOCATE_parser_prod___APercentMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17684,121 +12295,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3121);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APercentMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3124;
-  fra.me.meth = LOCATE_parser_prod___APercentMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3126 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_percent");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3126);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_percent", LOCATE_parser_prod, 2326);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APercentMethid___empty_init(val_t p0, int* init_table){
-  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+void parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
+  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos67]) 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 = 3094;
-  fra.me.meth = LOCATE_parser_prod___APercentMethid___empty_init;
+  fra.me.line = 2330;
+  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;
-  /* ./parser//parser_prod.nit:3094 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
+  init_table[itpos71] = 1;
   return;
 }
-void parser_prod___APercentMethid___init_apercentmethid(val_t p0, val_t p1, int* init_table){
-  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentMethid].i;
+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;
   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[itpos72]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3096;
-  fra.me.meth = LOCATE_parser_prod___APercentMethid___init_apercentmethid;
+  fra.me.line = 2332;
+  fra.me.meth = LOCATE_parser_prod___AEqMethid___init_aeqmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3100 */
-  CALL_parser_prod___APercentMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2336 */
+  CALL_parser_prod___AEqMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2337 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3101 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3101);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2337);
   }
-  ATTR_parser_nodes___APercentMethid____n_percent(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2338 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3102 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3102);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2338);
   }
   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;
-  return;
-}
-void parser_prod___AEqMethid___n_eq__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3130;
-  fra.me.meth = LOCATE_parser_prod___AEqMethid___n_eq__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3132 */
-  ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3133 */
-  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;
   return;
 }
 void parser_prod___AEqMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -17808,7 +12365,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 = 3147;
+  fra.me.line = 2341;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -17819,13 +12376,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3149 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3149);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser_prod, 2343);
   }
   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]));
@@ -17835,8 +12390,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3150 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -17850,31 +12405,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3151 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3151);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2345);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2346 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEq, ID_TEq)) /*cast TEq*/;
-      /* ./parser//parser_prod.nit:3152 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3152);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2346);
       }
-      /* ./parser//parser_prod.nit:3153 */
+      /* ./parser//parser_prod.nit:2347 */
       ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3155 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3155);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2349 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2349);
     }
-    /* ./parser//parser_prod.nit:3157 */
+    /* ./parser//parser_prod.nit:2351 */
     goto label1;
   }
   label1: while(0);
@@ -17887,7 +12436,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 = 3161;
+  fra.me.line = 2355;
   fra.me.meth = LOCATE_parser_prod___AEqMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -17895,121 +12444,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3163 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3163);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_eq", LOCATE_parser_prod, 2357);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AEqMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3166;
-  fra.me.meth = LOCATE_parser_prod___AEqMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3168 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_eq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3168);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEqMethid___empty_init(val_t p0, int* init_table){
-  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+void parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
+  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos69]) 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 = 3136;
-  fra.me.meth = LOCATE_parser_prod___AEqMethid___empty_init;
+  fra.me.line = 2361;
+  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;
-  /* ./parser//parser_prod.nit:3136 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
+  init_table[itpos73] = 1;
   return;
 }
-void parser_prod___AEqMethid___init_aeqmethid(val_t p0, val_t p1, int* init_table){
-  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqMethid].i;
+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;
   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[itpos74]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3138;
-  fra.me.meth = LOCATE_parser_prod___AEqMethid___init_aeqmethid;
+  fra.me.line = 2363;
+  fra.me.meth = LOCATE_parser_prod___ANeMethid___init_anemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3142 */
-  CALL_parser_prod___AEqMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2367 */
+  CALL_parser_prod___ANeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2368 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3143 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3143);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2368);
   }
-  ATTR_parser_nodes___AEqMethid____n_eq(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2369 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3144 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3144);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2369);
   }
   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;
-  return;
-}
-void parser_prod___ANeMethid___n_ne__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3172;
-  fra.me.meth = LOCATE_parser_prod___ANeMethid___n_ne__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3174 */
-  ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3175 */
-  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;
   return;
 }
 void parser_prod___ANeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18019,7 +12514,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 = 3189;
+  fra.me.line = 2372;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18030,13 +12525,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3191 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3191);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser_prod, 2374);
   }
   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]));
@@ -18046,8 +12539,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3192 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -18061,31 +12554,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3193 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3193);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2376);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2377 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNe, ID_TNe)) /*cast TNe*/;
-      /* ./parser//parser_prod.nit:3194 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3194);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2377);
       }
-      /* ./parser//parser_prod.nit:3195 */
+      /* ./parser//parser_prod.nit:2378 */
       ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3197 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3197);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2380 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2380);
     }
-    /* ./parser//parser_prod.nit:3199 */
+    /* ./parser//parser_prod.nit:2382 */
     goto label1;
   }
   label1: while(0);
@@ -18098,7 +12585,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 = 3203;
+  fra.me.line = 2386;
   fra.me.meth = LOCATE_parser_prod___ANeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18106,121 +12593,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3205 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3205);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ne", LOCATE_parser_prod, 2388);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANeMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3208;
-  fra.me.meth = LOCATE_parser_prod___ANeMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3210 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ne");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3210);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANeMethid___empty_init(val_t p0, int* init_table){
-  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+void parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
+  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos71]) 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 = 3178;
-  fra.me.meth = LOCATE_parser_prod___ANeMethid___empty_init;
+  fra.me.line = 2392;
+  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;
-  /* ./parser//parser_prod.nit:3178 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
+  init_table[itpos75] = 1;
   return;
 }
-void parser_prod___ANeMethid___init_anemethid(val_t p0, val_t p1, int* init_table){
-  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeMethid].i;
+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;
   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[itpos76]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3180;
-  fra.me.meth = LOCATE_parser_prod___ANeMethid___init_anemethid;
+  fra.me.line = 2394;
+  fra.me.meth = LOCATE_parser_prod___ALeMethid___init_alemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3184 */
-  CALL_parser_prod___ANeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2398 */
+  CALL_parser_prod___ALeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2399 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3185 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3185);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2399);
   }
-  ATTR_parser_nodes___ANeMethid____n_ne(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2400 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3186 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3186);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2400);
   }
   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;
-  return;
-}
-void parser_prod___ALeMethid___n_le__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3214;
-  fra.me.meth = LOCATE_parser_prod___ALeMethid___n_le__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3216 */
-  ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3217 */
-  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;
   return;
 }
 void parser_prod___ALeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18230,7 +12663,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 = 3231;
+  fra.me.line = 2403;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18241,13 +12674,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3233 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3233);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser_prod, 2405);
   }
   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]));
@@ -18257,8 +12688,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3234 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -18272,31 +12703,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3235 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3235);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2407);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2408 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLe, ID_TLe)) /*cast TLe*/;
-      /* ./parser//parser_prod.nit:3236 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3236);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2408);
       }
-      /* ./parser//parser_prod.nit:3237 */
+      /* ./parser//parser_prod.nit:2409 */
       ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3239 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3239);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2411 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2411);
     }
-    /* ./parser//parser_prod.nit:3241 */
+    /* ./parser//parser_prod.nit:2413 */
     goto label1;
   }
   label1: while(0);
@@ -18309,7 +12734,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 = 3245;
+  fra.me.line = 2417;
   fra.me.meth = LOCATE_parser_prod___ALeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18317,121 +12742,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3247 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3247);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALeMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3250;
-  fra.me.meth = LOCATE_parser_prod___ALeMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3252 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_le");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3252);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_le", LOCATE_parser_prod, 2419);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ALeMethid___empty_init(val_t p0, int* init_table){
-  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+void parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
+  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos73]) 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 = 3220;
-  fra.me.meth = LOCATE_parser_prod___ALeMethid___empty_init;
+  fra.me.line = 2423;
+  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;
-  /* ./parser//parser_prod.nit:3220 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
+  init_table[itpos77] = 1;
   return;
 }
-void parser_prod___ALeMethid___init_alemethid(val_t p0, val_t p1, int* init_table){
-  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeMethid].i;
+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;
   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[itpos78]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3222;
-  fra.me.meth = LOCATE_parser_prod___ALeMethid___init_alemethid;
+  fra.me.line = 2425;
+  fra.me.meth = LOCATE_parser_prod___AGeMethid___init_agemethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3226 */
-  CALL_parser_prod___ALeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2429 */
+  CALL_parser_prod___AGeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2430 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3227 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3227);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2430);
   }
-  ATTR_parser_nodes___ALeMethid____n_le(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2431 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3228 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3228);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2431);
   }
   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;
-  return;
-}
-void parser_prod___AGeMethid___n_ge__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3256;
-  fra.me.meth = LOCATE_parser_prod___AGeMethid___n_ge__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3258 */
-  ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3259 */
-  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;
   return;
 }
 void parser_prod___AGeMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18441,7 +12812,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 = 3273;
+  fra.me.line = 2434;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18452,13 +12823,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3275 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3275);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser_prod, 2436);
   }
   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]));
@@ -18468,8 +12837,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3276 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -18483,31 +12852,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3277 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3277);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2438);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2439 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGe, ID_TGe)) /*cast TGe*/;
-      /* ./parser//parser_prod.nit:3278 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3278);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2439);
       }
-      /* ./parser//parser_prod.nit:3279 */
+      /* ./parser//parser_prod.nit:2440 */
       ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3281 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3281);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2442 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2442);
     }
-    /* ./parser//parser_prod.nit:3283 */
+    /* ./parser//parser_prod.nit:2444 */
     goto label1;
   }
   label1: while(0);
@@ -18520,7 +12883,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 = 3287;
+  fra.me.line = 2448;
   fra.me.meth = LOCATE_parser_prod___AGeMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18528,121 +12891,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3289 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3289);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ge", LOCATE_parser_prod, 2450);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGeMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3292;
-  fra.me.meth = LOCATE_parser_prod___AGeMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3294 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ge");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3294);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AGeMethid___empty_init(val_t p0, int* init_table){
-  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+void parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
+  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos75]) 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 = 3262;
-  fra.me.meth = LOCATE_parser_prod___AGeMethid___empty_init;
+  fra.me.line = 2454;
+  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;
-  /* ./parser//parser_prod.nit:3262 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
+  init_table[itpos79] = 1;
   return;
 }
-void parser_prod___AGeMethid___init_agemethid(val_t p0, val_t p1, int* init_table){
-  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeMethid].i;
+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;
   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[itpos80]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3264;
-  fra.me.meth = LOCATE_parser_prod___AGeMethid___init_agemethid;
+  fra.me.line = 2456;
+  fra.me.meth = LOCATE_parser_prod___ALtMethid___init_altmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3268 */
-  CALL_parser_prod___AGeMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2460 */
+  CALL_parser_prod___ALtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2461 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3269 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3269);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2461);
   }
-  ATTR_parser_nodes___AGeMethid____n_ge(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2462 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3270 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3270);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2462);
   }
   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;
-  return;
-}
-void parser_prod___ALtMethid___n_lt__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3298;
-  fra.me.meth = LOCATE_parser_prod___ALtMethid___n_lt__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3300 */
-  ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3301 */
-  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;
   return;
 }
 void parser_prod___ALtMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -18652,7 +12961,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 = 3315;
+  fra.me.line = 2465;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -18663,13 +12972,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3317 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3317);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser_prod, 2467);
   }
   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]));
@@ -18679,8 +12986,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3318 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -18694,31 +13001,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3319 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3319);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2469);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2470 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TLt, ID_TLt)) /*cast TLt*/;
-      /* ./parser//parser_prod.nit:3320 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3320);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2470);
       }
-      /* ./parser//parser_prod.nit:3321 */
+      /* ./parser//parser_prod.nit:2471 */
       ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3323 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3323);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2473 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2473);
     }
-    /* ./parser//parser_prod.nit:3325 */
+    /* ./parser//parser_prod.nit:2475 */
     goto label1;
   }
   label1: while(0);
@@ -18731,7 +13032,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 = 3329;
+  fra.me.line = 2479;
   fra.me.meth = LOCATE_parser_prod___ALtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -18739,132 +13040,227 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3331 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3331);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_lt", LOCATE_parser_prod, 2481);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ALtMethid___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
+  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 2485;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos82]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3334;
-  fra.me.meth = LOCATE_parser_prod___ALtMethid___visit_all_reverse;
+  fra.me.line = 2487;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___init_agtmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3336 */
+  /* ./parser//parser_prod.nit:2491 */
+  CALL_parser_prod___AGtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2492 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_lt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3336);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2492);
   }
-  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]);
+  ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2493 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2493);
+  }
+  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;
   return;
 }
-void parser_prod___ALtMethid___empty_init(val_t p0, int* init_table){
-  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
-  struct {struct stack_frame_t me;} fra;
+void parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  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 = 3304;
-  fra.me.meth = LOCATE_parser_prod___ALtMethid___empty_init;
+  fra.me.line = 2496;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  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;
-  /* ./parser//parser_prod.nit:3304 */
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2498 */
+  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);
+  }
+  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]));
+  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:2499 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:2500 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2500);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2501 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:2502 */
+      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:2506 */
+    goto label1;
+  }
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
   return;
 }
-void parser_prod___ALtMethid___init_altmethid(val_t p0, val_t p1, int* init_table){
-  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtMethid].i;
+void parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  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 = 3306;
-  fra.me.meth = LOCATE_parser_prod___ALtMethid___init_altmethid;
+  fra.me.line = 2510;
+  fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3310 */
-  CALL_parser_prod___ALtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3311 */
+  /* ./parser//parser_prod.nit:2512 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3311);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ALtMethid____n_lt(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3312 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3312);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_gt", LOCATE_parser_prod, 2512);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos78] = 1;
   return;
 }
-void parser_prod___AGtMethid___n_gt__eq(val_t p0, val_t p1){
+void parser_prod___ALlMethid___empty_init(val_t p0, int* init_table){
+  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 2516;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
+  if (init_table[itpos84]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3340;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___n_gt__eq;
+  fra.me.line = 2518;
+  fra.me.meth = LOCATE_parser_prod___ALlMethid___init_allmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3342 */
-  ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3343 */
+  /* ./parser//parser_prod.nit:2522 */
+  CALL_parser_prod___ALlMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2523 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2523);
+  }
+  ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2524 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2524);
+  }
   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;
   return;
 }
-void parser_prod___AGtMethid___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ALlMethid___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 3357;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___replace_child;
+  fra.me.line = 2527;
+  fra.me.meth = LOCATE_parser_prod___ALlMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -18874,15 +13270,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3359 */
+  /* ./parser//parser_prod.nit:2529 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3359);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser_prod, 2529);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -18890,8 +13284,8 @@ 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:2530 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3360 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -18905,186 +13299,270 @@ 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:2531 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3361 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3361);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2531);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TGt, ID_TGt)) /*cast TGt*/;
-      /* ./parser//parser_prod.nit:3362 */
+      /* ./parser//parser_prod.nit:2532 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3362);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2532);
       }
-      /* ./parser//parser_prod.nit:3363 */
-      ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:2533 */
+      ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3365 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3365);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2535 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2535);
     }
-    /* ./parser//parser_prod.nit:3367 */
+    /* ./parser//parser_prod.nit:2537 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGtMethid___visit_all(val_t p0, val_t p1){
+void parser_prod___ALlMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3371;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all;
+  fra.me.line = 2541;
+  fra.me.meth = LOCATE_parser_prod___ALlMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3373 */
+  /* ./parser//parser_prod.nit:2543 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ALlMethid____n_ll(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3373);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ll", LOCATE_parser_prod, 2543);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGtMethid___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AGgMethid___empty_init(val_t p0, int* init_table){
+  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgMethid].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 2547;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos86]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3376;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___visit_all_reverse;
+  fra.me.line = 2549;
+  fra.me.meth = LOCATE_parser_prod___AGgMethid___init_aggmethid;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3378 */
+  /* ./parser//parser_prod.nit:2553 */
+  CALL_parser_prod___AGgMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2554 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_gt");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3378);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2554);
   }
-  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]);
+  ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2555 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2555);
+  }
+  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;
   return;
 }
-void parser_prod___AGtMethid___empty_init(val_t p0, int* init_table){
-  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
-  struct {struct stack_frame_t me;} fra;
+void parser_prod___AGgMethid___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  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 = 3346;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___empty_init;
+  fra.me.line = 2558;
+  fra.me.meth = LOCATE_parser_prod___AGgMethid___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  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;
-  /* ./parser//parser_prod.nit:3346 */
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2560 */
+  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);
+  }
+  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]));
+  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:2561 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:2562 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2562);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2563 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:2564 */
+      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:2568 */
+    goto label1;
+  }
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos79] = 1;
   return;
 }
-void parser_prod___AGtMethid___init_agtmethid(val_t p0, val_t p1, int* init_table){
-  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtMethid].i;
+void parser_prod___AGgMethid___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  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 = 3348;
-  fra.me.meth = LOCATE_parser_prod___AGtMethid___init_agtmethid;
+  fra.me.line = 2572;
+  fra.me.meth = LOCATE_parser_prod___AGgMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3352 */
-  CALL_parser_prod___AGtMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3353 */
+  /* ./parser//parser_prod.nit:2574 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AGgMethid____n_gg(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3353);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AGtMethid____n_gt(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3354 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3354);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_gg", LOCATE_parser_prod, 2574);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos80] = 1;
   return;
 }
-void parser_prod___ABraMethid___n_obra__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
+  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 3382;
-  fra.me.meth = LOCATE_parser_prod___ABraMethid___n_obra__eq;
+  fra.me.line = 2578;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3384 */
-  ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3385 */
-  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[itpos87] = 1;
   return;
 }
-void parser_prod___ABraMethid___n_cbra__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
   val_t tmp;
+  if (init_table[itpos88]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3387;
-  fra.me.meth = LOCATE_parser_prod___ABraMethid___n_cbra__eq;
+  fra.me.line = 2580;
+  fra.me.meth = LOCATE_parser_prod___ABraMethid___init_abramethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:3389 */
-  ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3390 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2585 */
+  CALL_parser_prod___ABraMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2586 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2586);
+  }
+  ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2587 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2587);
+  }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2588 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2588);
+  }
+  ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2589 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2589);
+  }
+  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;
   return;
 }
 void parser_prod___ABraMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19094,7 +13572,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 = 3407;
+  fra.me.line = 2592;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19105,13 +13583,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3409 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3409);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2594);
   }
   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]));
@@ -19121,8 +13597,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3410 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -19136,40 +13612,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3411 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3411);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2596);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2597 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
-      /* ./parser//parser_prod.nit:3412 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3412);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2597);
       }
-      /* ./parser//parser_prod.nit:3413 */
+      /* ./parser//parser_prod.nit:2598 */
       ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3415 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3415);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2600 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2600);
     }
-    /* ./parser//parser_prod.nit:3417 */
+    /* ./parser//parser_prod.nit:2602 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2604 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3419 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3419);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2604);
   }
   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]));
@@ -19179,8 +13647,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3420 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -19194,31 +13662,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3421 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3421);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2606);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2607 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
-      /* ./parser//parser_prod.nit:3422 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3422);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2607);
       }
-      /* ./parser//parser_prod.nit:3423 */
+      /* ./parser//parser_prod.nit:2608 */
       ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3425 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3425);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2610 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2610);
     }
-    /* ./parser//parser_prod.nit:3427 */
+    /* ./parser//parser_prod.nit:2612 */
     goto label1;
   }
   label1: while(0);
@@ -19231,7 +13693,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 = 3431;
+  fra.me.line = 2616;
   fra.me.meth = LOCATE_parser_prod___ABraMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19240,161 +13702,75 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3433 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3433);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3434 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3434);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3437;
-  fra.me.meth = LOCATE_parser_prod___ABraMethid___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3439 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3439);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2618);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3440 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3440);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2619);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABraMethid___empty_init(val_t p0, int* init_table){
-  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
+void parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_table){
+  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos81]) 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 = 3393;
-  fra.me.meth = LOCATE_parser_prod___ABraMethid___empty_init;
+  fra.me.line = 2623;
+  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;
-  /* ./parser//parser_prod.nit:3393 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos81] = 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 itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  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[itpos90]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3395;
-  fra.me.meth = LOCATE_parser_prod___ABraMethid___init_abramethid;
+  fra.me.line = 2625;
+  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___init_astarshipmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:3400 */
-  CALL_parser_prod___ABraMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2629 */
+  CALL_parser_prod___AStarshipMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2630 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3401 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3401);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2630);
   }
-  ATTR_parser_nodes___ABraMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2631 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3402 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3402);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3403 */
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3403);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABraMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3404 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3404);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2631);
   }
-  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[itpos82] = 1;
-  return;
-}
-void parser_prod___AStarshipMethid___n_starship__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3444;
-  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___n_starship__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3446 */
-  ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3447 */
   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;
   return;
 }
 void parser_prod___AStarshipMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19404,7 +13780,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 = 3461;
+  fra.me.line = 2634;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19415,13 +13791,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3463 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3463);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser_prod, 2636);
   }
   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]));
@@ -19431,8 +13805,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3464 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -19446,31 +13820,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3465 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3465);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2638);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2639 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStarship, ID_TStarship)) /*cast TStarship*/;
-      /* ./parser//parser_prod.nit:3466 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3466);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2639);
       }
-      /* ./parser//parser_prod.nit:3467 */
+      /* ./parser//parser_prod.nit:2640 */
       ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3469 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3469);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2642 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2642);
     }
-    /* ./parser//parser_prod.nit:3471 */
+    /* ./parser//parser_prod.nit:2644 */
     goto label1;
   }
   label1: while(0);
@@ -19483,7 +13851,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 = 3475;
+  fra.me.line = 2648;
   fra.me.meth = LOCATE_parser_prod___AStarshipMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -19491,141 +13859,82 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3477);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarshipMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3480;
-  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3482 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_starship");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3482);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_starship", LOCATE_parser_prod, 2650);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarshipMethid___empty_init(val_t p0, int* init_table){
-  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
+void parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table){
+  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos83]) 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 = 3450;
-  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___empty_init;
+  fra.me.line = 2654;
+  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;
-  /* ./parser//parser_prod.nit:3450 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos83] = 1;
+  init_table[itpos91] = 1;
   return;
 }
-void parser_prod___AStarshipMethid___init_astarshipmethid(val_t p0, val_t p1, int* init_table){
-  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos84]) return;
+  if (init_table[itpos92]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3452;
-  fra.me.meth = LOCATE_parser_prod___AStarshipMethid___init_astarshipmethid;
+  fra.me.line = 2656;
+  fra.me.meth = LOCATE_parser_prod___AAssignMethid___init_aassignmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:3456 */
-  CALL_parser_prod___AStarshipMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2661 */
+  CALL_parser_prod___AAssignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2662 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3457 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3457);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2662);
   }
-  ATTR_parser_nodes___AStarshipMethid____n_starship(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2663 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3458 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3458);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2663);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2664 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2664);
+  }
+  ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2665 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2665);
+  }
+  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[itpos84] = 1;
-  return;
-}
-void parser_prod___AAssignMethid___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3486;
-  fra.me.meth = LOCATE_parser_prod___AAssignMethid___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3488 */
-  ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3489 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssignMethid___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3491;
-  fra.me.meth = LOCATE_parser_prod___AAssignMethid___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3493 */
-  ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3494 */
-  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[itpos92] = 1;
   return;
 }
 void parser_prod___AAssignMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19635,7 +13944,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 = 3511;
+  fra.me.line = 2668;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19646,13 +13955,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3513 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3513);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2670);
   }
   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]));
@@ -19662,8 +13969,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3514 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -19677,40 +13984,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3515 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3515);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2672);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2673 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:3516 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3516);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2673);
       }
-      /* ./parser//parser_prod.nit:3517 */
+      /* ./parser//parser_prod.nit:2674 */
       ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3519 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3519);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2676 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2676);
     }
-    /* ./parser//parser_prod.nit:3521 */
+    /* ./parser//parser_prod.nit:2678 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2680 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3523 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3523);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2680);
   }
   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]));
@@ -19720,8 +14019,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3524 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -19735,31 +14034,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3525 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3525);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2682);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2683 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:3526 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3526);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2683);
       }
-      /* ./parser//parser_prod.nit:3527 */
+      /* ./parser//parser_prod.nit:2684 */
       ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3529 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3529);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2686 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2686);
     }
-    /* ./parser//parser_prod.nit:3531 */
+    /* ./parser//parser_prod.nit:2688 */
     goto label1;
   }
   label1: while(0);
@@ -19772,7 +14065,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 = 3535;
+  fra.me.line = 2692;
   fra.me.meth = LOCATE_parser_prod___AAssignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -19781,201 +14074,105 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3537 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3537);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3538 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3538);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssignMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3541;
-  fra.me.meth = LOCATE_parser_prod___AAssignMethid___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3543 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3543);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2694);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3544 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3544);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2695);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAssignMethid___empty_init(val_t p0, int* init_table){
-  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
+void parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_table){
+  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos85]) 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 = 3497;
-  fra.me.meth = LOCATE_parser_prod___AAssignMethid___empty_init;
+  fra.me.line = 2699;
+  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;
-  /* ./parser//parser_prod.nit:3497 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos85] = 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 itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssignMethid].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos86]) 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 = 3499;
-  fra.me.meth = LOCATE_parser_prod___AAssignMethid___init_aassignmethid;
+  fra.me.line = 2701;
+  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___init_abraassignmethid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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:3504 */
-  CALL_parser_prod___AAssignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:2707 */
+  CALL_parser_prod___ABraassignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2708 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3505 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3505);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2708);
   }
-  ATTR_parser_nodes___AAssignMethid____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2709 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3506 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3506);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2709);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2710 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3507 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3507);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2710);
   }
-  ATTR_parser_nodes___AAssignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2711 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3508 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3508);
-    nit_exit(1);
+    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:2712 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2712);
+  }
+  ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:2713 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2713);
+  }
+  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[itpos86] = 1;
-  return;
-}
-void parser_prod___ABraassignMethid___n_obra__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3548;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_obra__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3550 */
-  ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3551 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___n_cbra__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3553;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_cbra__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3555 */
-  ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3556 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3558;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3560 */
-  ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3561 */
-  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[itpos94] = 1;
   return;
 }
 void parser_prod___ABraassignMethid___replace_child(val_t p0, val_t p1, val_t p2){
@@ -19985,7 +14182,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 = 3581;
+  fra.me.line = 2716;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -19996,13 +14193,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3583 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3583);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2718);
   }
   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]));
@@ -20012,8 +14207,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3584 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -20027,40 +14222,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3585 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3585);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2720);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2721 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TObra, ID_TObra)) /*cast TObra*/;
-      /* ./parser//parser_prod.nit:3586 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3586);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2721);
       }
-      /* ./parser//parser_prod.nit:3587 */
+      /* ./parser//parser_prod.nit:2722 */
       ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3589 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3589);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2724 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2724);
     }
-    /* ./parser//parser_prod.nit:3591 */
+    /* ./parser//parser_prod.nit:2726 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2728 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3593 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3593);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2728);
   }
   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]));
@@ -20070,8 +14257,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3594 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -20085,40 +14272,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3595 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3595);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2730);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2731 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TCbra, ID_TCbra)) /*cast TCbra*/;
-      /* ./parser//parser_prod.nit:3596 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3596);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2731);
       }
-      /* ./parser//parser_prod.nit:3597 */
+      /* ./parser//parser_prod.nit:2732 */
       ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3599 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3599);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2734 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2734);
     }
-    /* ./parser//parser_prod.nit:3601 */
+    /* ./parser//parser_prod.nit:2736 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2738 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3603 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3603);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2738);
   }
   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]));
@@ -20128,8 +14307,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3604 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -20143,31 +14322,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3605 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3605);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2740);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2741 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:3606 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3606);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2741);
       }
-      /* ./parser//parser_prod.nit:3607 */
+      /* ./parser//parser_prod.nit:2742 */
       ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3609 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3609);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2744 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2744);
     }
-    /* ./parser//parser_prod.nit:3611 */
+    /* ./parser//parser_prod.nit:2746 */
     goto label1;
   }
   label1: while(0);
@@ -20180,7 +14353,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 = 3615;
+  fra.me.line = 2750;
   fra.me.meth = LOCATE_parser_prod___ABraassignMethid___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -20189,115 +14362,61 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3617 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3617);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3618 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3618);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3619 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3619);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraassignMethid___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3622;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3624 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_obra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3624);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_obra", LOCATE_parser_prod, 2752);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3625 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_cbra");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3625);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_cbra", LOCATE_parser_prod, 2753);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3626 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3626);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 2754);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABraassignMethid___empty_init(val_t p0, int* init_table){
-  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+void parser_prod___ASignature___empty_init(val_t p0, int* init_table){
+  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos87]) 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 = 3564;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___empty_init;
+  fra.me.line = 2758;
+  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;
-  /* ./parser//parser_prod.nit:3564 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos87] = 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 itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraassignMethid].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos88]) 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 = 3566;
-  fra.me.meth = LOCATE_parser_prod___ABraassignMethid___init_abraassignmethid;
+  fra.me.line = 2760;
+  fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -20308,386 +14427,378 @@ 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:3572 */
-  CALL_parser_prod___ABraassignMethid___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3573);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABraassignMethid____n_obra(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3574 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3574);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3575 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3575);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABraassignMethid____n_cbra(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2766 */
+  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 */
+  ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2773 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3576 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3576);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3577 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3577);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABraassignMethid____n_assign(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3578 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3578);
-    nit_exit(1);
-  }
-  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[itpos88] = 1;
-  return;
-}
-void parser_prod___ASignature___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3630;
-  fra.me.meth = LOCATE_parser_prod___ASignature___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3632 */
-  ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3633 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3634 */
+    /* ./parser//parser_prod.nit:2774 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3634);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2774);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:2767 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:2768 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:2769 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ASignature___init_asignature_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:2776 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:2777 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:2778 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3663;
+  fra.me.line = 2783;
   fra.me.meth = LOCATE_parser_prod___ASignature___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:2785 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3665 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3665);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2785);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3666 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3666);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:2785 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:2786 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:3667 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:2787 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AParam, ID_AParam)) /*cast AParam*/;
-          /* ./parser//parser_prod.nit:3668 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:2788 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3668);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2788);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:3669 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:2789 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3669);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2789);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:3670 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3670);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2790);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:3672 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:2792 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3672);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2792);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:3674 */
+        /* ./parser//parser_prod.nit:2794 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:3665 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
+  /* ./parser//parser_prod.nit:2797 */
   fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:3677 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(false);
-      REGB1 = REGB0;
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
     } else {
-      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB1 = REGB0;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3678 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2798 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3679 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3679);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:2799 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2799);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:3680 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:2800 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3680);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2800);
       }
-      /* ./parser//parser_prod.nit:3681 */
+      /* ./parser//parser_prod.nit:2801 */
       ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3683 */
+      /* ./parser//parser_prod.nit:2803 */
       ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3685 */
+    /* ./parser//parser_prod.nit:2805 */
     goto label1;
   }
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3687 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:2807 */
+  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 {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3687);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2807);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3688 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3688);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:2807 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:2808 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:3689 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:2809 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
-          /* ./parser//parser_prod.nit:3690 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:2810 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3690);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2810);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:3691 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:2811 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3691);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2811);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:3692 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3692);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2812);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:3694 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:2814 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3694);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2814);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          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:3696 */
+        /* ./parser//parser_prod.nit:2816 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:3687 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
   label1: while(0);
@@ -20695,107 +14806,14 @@ void parser_prod___ASignature___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ASignature___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 3701;
-  fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3703 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3703);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:3704 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:3703 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3706 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:3707 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3707);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3709 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3709);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:3710 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:3709 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASignature___visit_all_reverse(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 = 3714;
-  fra.me.meth = LOCATE_parser_prod___ASignature___visit_all_reverse;
+  fra.me.line = 2821;
+  fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -20803,46 +14821,17 @@ void parser_prod___ASignature___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3717 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3717);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_params", LOCATE_parser_prod, 2823);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3718 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:3718 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3719 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3719);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:3720 */
-    } else {
-      /* ./parser//parser_prod.nit:3718 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3723 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -20856,302 +14845,169 @@ void parser_prod___ASignature___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2827 */
     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*/;
-    /* ./parser//parser_prod.nit:3724 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3724);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2827);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2829 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3727 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3727);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_decls", LOCATE_parser_prod, 2829);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:3728 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:3728 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3729 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3729);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:3730 */
-    } else {
-      /* ./parser//parser_prod.nit:3728 */
-      goto label2;
-    }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ASignature___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:2824 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ASignature___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASignature___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:2830 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASignature___empty_init(val_t p0, int* init_table){
-  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
+void parser_prod___AParam___empty_init(val_t p0, int* init_table){
+  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos89]) 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 = 3638;
-  fra.me.meth = LOCATE_parser_prod___ASignature___empty_init;
+  fra.me.line = 2835;
+  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;
-  /* ./parser//parser_prod.nit:3638 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos89] = 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 itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASignature].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos90]) 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 = 3640;
-  fra.me.meth = LOCATE_parser_prod___ASignature___init_asignature;
+  fra.me.line = 2837;
+  fra.me.meth = LOCATE_parser_prod___AParam___init_aparam;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3646 */
-  CALL_parser_prod___ASignature___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:3647 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[4] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_AParam, ID_AParam)) /*cast AParam*/;
-      /* ./parser//parser_prod.nit:3648 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3648);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3649 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_params");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3649);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_parser_nodes___ASignature____n_params(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-      /* ./parser//parser_prod.nit:3650 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:3647 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
-  /* ./parser//parser_prod.nit:3652 */
-  ATTR_parser_nodes___ASignature____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3653 */
+  /* ./parser//parser_prod.nit:2843 */
+  CALL_parser_prod___AParam___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2844 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2844);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2845 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3654 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3654);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:3656 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDecl, ID_AClosureDecl)) /*cast AClosureDecl*/;
-      /* ./parser//parser_prod.nit:3657 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3657);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:3658 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_decls");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3658);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ASignature____n_closure_decls(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:3659 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:3656 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2845);
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos90] = 1;
-  return;
-}
-void parser_prod___AParam___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3736;
-  fra.me.meth = LOCATE_parser_prod___AParam___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3738 */
-  ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3739 */
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AParam___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3741;
-  fra.me.meth = LOCATE_parser_prod___AParam___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3743 */
-  ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3744 */
+  /* ./parser//parser_prod.nit:2846 */
+  ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2847 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3745 */
+    /* ./parser//parser_prod.nit:2848 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3745);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2848);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AParam___n_dotdotdot__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3748;
-  fra.me.meth = LOCATE_parser_prod___AParam___n_dotdotdot__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3750 */
-  ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3751 */
+  /* ./parser//parser_prod.nit:2850 */
+  ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:2851 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3752 */
+    /* ./parser//parser_prod.nit:2852 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3752);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2852);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21161,7 +15017,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 = 3777;
+  fra.me.line = 2856;
   fra.me.meth = LOCATE_parser_prod___AParam___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21172,13 +15028,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3779 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3779);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2858);
   }
   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]));
@@ -21188,8 +15042,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3780 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21203,36 +15057,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3781 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3781);
-        nit_exit(1);
+        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:2861 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:3782 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3782);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2861);
       }
-      /* ./parser//parser_prod.nit:3783 */
+      /* ./parser//parser_prod.nit:2862 */
       ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3785 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3785);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2864 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2864);
     }
-    /* ./parser//parser_prod.nit:3787 */
+    /* ./parser//parser_prod.nit:2866 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2868 */
   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]));
-  /* ./parser//parser_prod.nit:3789 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -21245,8 +15093,8 @@ void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2869 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3790 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21260,34 +15108,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3791 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3791);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2870);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2871 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:3792 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3792);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2871);
       }
-      /* ./parser//parser_prod.nit:3793 */
+      /* ./parser//parser_prod.nit:2872 */
       ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3795 */
+      /* ./parser//parser_prod.nit:2874 */
       ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3797 */
+    /* ./parser//parser_prod.nit:2876 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2878 */
   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]));
-  /* ./parser//parser_prod.nit:3799 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -21300,8 +15144,8 @@ void parser_prod___AParam___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2879 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3800 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21315,29 +15159,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3801 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3801);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2880);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2881 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast TDotdotdot*/;
-      /* ./parser//parser_prod.nit:3802 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3802);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2881);
       }
-      /* ./parser//parser_prod.nit:3803 */
+      /* ./parser//parser_prod.nit:2882 */
       ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3805 */
+      /* ./parser//parser_prod.nit:2884 */
       ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3807 */
+    /* ./parser//parser_prod.nit:2886 */
     goto label1;
   }
   label1: while(0);
@@ -21351,7 +15191,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 = 3811;
+  fra.me.line = 2890;
   fra.me.meth = LOCATE_parser_prod___AParam___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -21360,19 +15200,17 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3813 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3813);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2892);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3814 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21386,20 +15224,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:3815 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3815);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2894);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2896 */
   fra.me.REG[2] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3817 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21413,363 +15249,151 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:3818 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3818);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2897);
     }
     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___AParam___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___AClosureDecl___empty_init(val_t p0, int* init_table){
+  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 3822;
-  fra.me.meth = LOCATE_parser_prod___AParam___visit_all_reverse;
+  fra.me.line = 2902;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AParam____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3824 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3824);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3825 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:3826 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3826);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3828 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:3829 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3829);
-      nit_exit(1);
-    }
-    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___AParam___empty_init(val_t p0, int* init_table){
-  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 3756;
-  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;
-  /* ./parser//parser_prod.nit:3756 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos91] = 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 itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParam].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos92]) 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 = 3758;
-  fra.me.meth = LOCATE_parser_prod___AParam___init_aparam;
+  fra.me.line = 2904;
+  fra.me.meth = LOCATE_parser_prod___AClosureDecl___init_aclosuredecl;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3764 */
-  CALL_parser_prod___AParam___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3765 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3765);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AParam____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:2912 */
+  CALL_parser_prod___AClosureDecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:2913 */
+  ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:2914 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3766 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3766);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3767 */
-  ATTR_parser_nodes___AParam____n_type(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3768 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3769 */
+    /* ./parser//parser_prod.nit:2915 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3769);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2915);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:3771 */
-  ATTR_parser_nodes___AParam____n_dotdotdot(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3772 */
+  /* ./parser//parser_prod.nit:2917 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2917);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:2918 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3773 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3773);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2918);
   }
-  stack_frame_head = fra.me.prev;
-  init_table[itpos92] = 1;
-  return;
-}
-void parser_prod___AClosureDecl___n_kwbreak__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3834;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_kwbreak__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3836 */
-  ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3837 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2919 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2919);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:2920 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3838 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3838);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2920);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_bang__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3841;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_bang__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3843 */
-  ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3844 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3846;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3848 */
-  ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3849 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_signature__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3851;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_signature__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3853 */
-  ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3854 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDecl___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3856;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3858 */
-  ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3859 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2921 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2921);
+  }
+  ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:2922 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2922);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:2923 */
+  ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:2924 */
+  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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3860 */
+    /* ./parser//parser_prod.nit:2925 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3860);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2925);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
@@ -21779,7 +15403,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 = 3891;
+  fra.me.line = 2929;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -21790,9 +15414,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:3893 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -21805,8 +15429,8 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2932 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3894 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21820,38 +15444,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3895 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3895);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2933);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2934 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
-      /* ./parser//parser_prod.nit:3896 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3896);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2934);
       }
-      /* ./parser//parser_prod.nit:3897 */
+      /* ./parser//parser_prod.nit:2935 */
       ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3899 */
+      /* ./parser//parser_prod.nit:2937 */
       ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3901 */
+    /* ./parser//parser_prod.nit:2939 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2941 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3903 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3903);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 2941);
   }
   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]));
@@ -21861,8 +15479,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3904 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21876,40 +15494,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3905 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3905);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2943);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2944 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
-      /* ./parser//parser_prod.nit:3906 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3906);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2944);
       }
-      /* ./parser//parser_prod.nit:3907 */
+      /* ./parser//parser_prod.nit:2945 */
       ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3909 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3909);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2947 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2947);
     }
-    /* ./parser//parser_prod.nit:3911 */
+    /* ./parser//parser_prod.nit:2949 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2951 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3913 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3913);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2951);
   }
   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]));
@@ -21919,8 +15529,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3914 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21934,40 +15544,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3915 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3915);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2953);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2954 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:3916 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3916);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2954);
       }
-      /* ./parser//parser_prod.nit:3917 */
+      /* ./parser//parser_prod.nit:2955 */
       ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3919 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3919);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2957 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2957);
     }
-    /* ./parser//parser_prod.nit:3921 */
+    /* ./parser//parser_prod.nit:2959 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2961 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3923 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3923);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser_prod, 2961);
   }
   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]));
@@ -21977,8 +15579,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3924 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -21992,36 +15594,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3925 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3925);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2963);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2964 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ASignature, ID_ASignature)) /*cast ASignature*/;
-      /* ./parser//parser_prod.nit:3926 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3926);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2964);
       }
-      /* ./parser//parser_prod.nit:3927 */
+      /* ./parser//parser_prod.nit:2965 */
       ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3929 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3929);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:2967 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 2967);
     }
-    /* ./parser//parser_prod.nit:3931 */
+    /* ./parser//parser_prod.nit:2969 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:2971 */
   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]));
-  /* ./parser//parser_prod.nit:3933 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -22034,8 +15630,8 @@ void parser_prod___AClosureDecl___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2972 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3934 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22049,29 +15645,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:3935 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3935);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 2973);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:2974 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:3936 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3936);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 2974);
       }
-      /* ./parser//parser_prod.nit:3937 */
+      /* ./parser//parser_prod.nit:2975 */
       ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:3939 */
+      /* ./parser//parser_prod.nit:2977 */
       ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:3941 */
+    /* ./parser//parser_prod.nit:2979 */
     goto label1;
   }
   label1: while(0);
@@ -22085,7 +15677,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 = 3945;
+  fra.me.line = 2983;
   fra.me.meth = LOCATE_parser_prod___AClosureDecl___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22094,112 +15686,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3947 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:3948 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3948);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3950 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3950);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3951 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3951);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3952 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3952);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3953 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:3954 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3954);
-      nit_exit(1);
-    }
-    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___AClosureDecl___visit_all_reverse(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 = 3958;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3960 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22213,50 +15702,42 @@ void parser_prod___AClosureDecl___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2986 */
     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*/;
-    /* ./parser//parser_prod.nit:3961 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3961);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2986);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:2988 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3963 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3963);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 2988);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3964 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3964);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 2989);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3965 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_signature");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3965);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_signature", LOCATE_parser_prod, 2990);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3966 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22270,69 +15751,62 @@ void parser_prod___AClosureDecl___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:2992 */
     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*/;
-    /* ./parser//parser_prod.nit:3967 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3967);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 2992);
     }
     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___AClosureDecl___empty_init(val_t p0, int* init_table){
-  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
+void parser_prod___AType___empty_init(val_t p0, int* init_table){
+  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos93]) 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 = 3864;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___empty_init;
+  fra.me.line = 2997;
+  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;
-  /* ./parser//parser_prod.nit:3864 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos93] = 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 itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDecl].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos94]) 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 = 3866;
-  fra.me.meth = LOCATE_parser_prod___AClosureDecl___init_aclosuredecl;
+  fra.me.line = 2999;
+  fra.me.meth = LOCATE_parser_prod___AType___init_atype;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:3874 */
-  CALL_parser_prod___AClosureDecl___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3875 */
-  ATTR_parser_nodes___AClosureDecl____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3005 */
+  CALL_parser_prod___AType___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3006 */
+  ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3007 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3876 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -22346,183 +15820,92 @@ 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:3008 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3877 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3877);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3008);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:3010 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3879 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3879);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3010);
   }
-  ATTR_parser_nodes___AClosureDecl____n_bang(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3011 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3880 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3880);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3011);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3881);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AClosureDecl____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3882 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3882);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3883 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3883);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AClosureDecl____n_signature(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3884 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3884);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:3885 */
-  ATTR_parser_nodes___AClosureDecl____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3886 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3887 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3887);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], 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[itpos94] = 1;
+  init_table[itpos102] = 1;
   return;
 }
-void parser_prod___AType___n_kwnullable__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3972;
-  fra.me.meth = LOCATE_parser_prod___AType___n_kwnullable__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3974 */
-  ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3975 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:3012 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AType___init_atype;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:3013 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AType, ID_AType)) /*cast AType*/;
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-      REGB0 = REGB1;
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3013);
     }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3976 */
+    /* ./parser//parser_prod.nit:3014 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3976);
-      nit_exit(1);
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3014);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AType___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3979;
-  fra.me.meth = LOCATE_parser_prod___AType___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:3981 */
-  ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:3982 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4007;
+  fra.me.line = 3019;
   fra.me.meth = LOCATE_parser_prod___AType___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3021 */
   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]));
-  /* ./parser//parser_prod.nit:4009 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -22535,8 +15918,8 @@ void parser_prod___AType___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3022 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4010 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22550,38 +15933,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4011 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4011);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3023);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3024 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnullable, ID_TKwnullable)) /*cast TKwnullable*/;
-      /* ./parser//parser_prod.nit:4012 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4012);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3024);
       }
-      /* ./parser//parser_prod.nit:4013 */
+      /* ./parser//parser_prod.nit:3025 */
       ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4015 */
+      /* ./parser//parser_prod.nit:3027 */
       ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4017 */
+    /* ./parser//parser_prod.nit:3029 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3031 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4019 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4019);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3031);
   }
   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]));
@@ -22591,8 +15968,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4020 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22606,134 +15983,123 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4021 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4021);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3033);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3034 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      /* ./parser//parser_prod.nit:4022 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4022);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3034);
       }
-      /* ./parser//parser_prod.nit:4023 */
+      /* ./parser//parser_prod.nit:3035 */
       ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4025 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4025);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3037 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3037);
     }
-    /* ./parser//parser_prod.nit:4027 */
+    /* ./parser//parser_prod.nit:3039 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3041 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4029 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4029);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3041);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4030 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4030);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:3041 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:3042 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:4031 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:3043 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-          /* ./parser//parser_prod.nit:4032 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:3044 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4032);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3044);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:4033 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:3045 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4033);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3045);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:4034 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4034);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3046);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:4036 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:3048 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4036);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3048);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:4038 */
+        /* ./parser//parser_prod.nit:3050 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:4029 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -22747,7 +16113,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 = 4043;
+  fra.me.line = 3055;
   fra.me.meth = LOCATE_parser_prod___AType___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -22756,9 +16122,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4045 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -22772,62 +16138,81 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4046 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4046);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3058);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3060 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4048 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4048);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3060);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4049 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4049);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_types", LOCATE_parser_prod, 3061);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4050 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:4049 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AType___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AType___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:3062 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
+void parser_prod___ALabel___empty_init(val_t p0, int* init_table){
+  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3067;
+  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;
   return;
 }
-void parser_prod___AType___visit_all_reverse(val_t p0, val_t p1){
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
+  if (init_table[itpos104]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4054;
-  fra.me.meth = LOCATE_parser_prod___AType___visit_all_reverse;
+  fra.me.line = 3069;
+  fra.me.meth = LOCATE_parser_prod___ALabel___init_alabel;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -22835,242 +16220,37 @@ void parser_prod___AType___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4056 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3074 */
+  CALL_parser_prod___ALabel___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3075 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3075);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3076 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4057 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4057);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4059 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4059);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4061 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4061);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4062 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:4062 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4063 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4063);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:4064 */
-    } else {
-      /* ./parser//parser_prod.nit:4062 */
-      goto label1;
-    }
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AType___empty_init(val_t p0, int* init_table){
-  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AType].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 3985;
-  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;
-  /* ./parser//parser_prod.nit:3985 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
-  return;
-}
-void parser_prod___AType___init_atype(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos96 = 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[itpos96]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 3987;
-  fra.me.meth = LOCATE_parser_prod___AType___init_atype;
-  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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:3993 */
-  CALL_parser_prod___AType___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:3994 */
-  ATTR_parser_nodes___AType____n_kwnullable(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3995 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:3996 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3996);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3076);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3077 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:3998 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3998);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3077);
   }
-  ATTR_parser_nodes___AType____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3078 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:3999 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 3999);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3078);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:4000 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:4001 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4001);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AType____n_types(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4002 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_types");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4002);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___AType____n_types(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:4003 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:4000 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos96] = 1;
-  return;
-}
-void parser_prod___ALabel___n_kwlabel__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4070;
-  fra.me.meth = LOCATE_parser_prod___ALabel___n_kwlabel__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4072 */
-  ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4073 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALabel___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4075;
-  fra.me.meth = LOCATE_parser_prod___ALabel___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4077 */
-  ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4078 */
-  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[itpos104] = 1;
   return;
 }
 void parser_prod___ALabel___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23080,7 +16260,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 = 4095;
+  fra.me.line = 3081;
   fra.me.meth = LOCATE_parser_prod___ALabel___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23091,13 +16271,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4097 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4097);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser_prod, 3083);
   }
   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]));
@@ -23107,8 +16285,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4098 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -23122,40 +16300,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4099 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4099);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3085);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3086 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwlabel, ID_TKwlabel)) /*cast TKwlabel*/;
-      /* ./parser//parser_prod.nit:4100 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4100);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3086);
       }
-      /* ./parser//parser_prod.nit:4101 */
+      /* ./parser//parser_prod.nit:3087 */
       ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4103 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4103);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3089 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3089);
     }
-    /* ./parser//parser_prod.nit:4105 */
+    /* ./parser//parser_prod.nit:3091 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3093 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4107 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4107);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3093);
   }
   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]));
@@ -23165,8 +16335,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4108 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -23180,31 +16350,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4109 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4109);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3095);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3096 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:4110 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4110);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3096);
       }
-      /* ./parser//parser_prod.nit:4111 */
+      /* ./parser//parser_prod.nit:3097 */
       ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4113 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4113);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3099 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3099);
     }
-    /* ./parser//parser_prod.nit:4115 */
+    /* ./parser//parser_prod.nit:3101 */
     goto label1;
   }
   label1: while(0);
@@ -23217,7 +16381,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 = 4119;
+  fra.me.line = 3105;
   fra.me.meth = LOCATE_parser_prod___ALabel___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -23226,264 +16390,218 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4121);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4122 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4122);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALabel___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4125;
-  fra.me.meth = LOCATE_parser_prod___ALabel___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4127 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwlabel");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4127);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwlabel", LOCATE_parser_prod, 3107);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4128 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4128);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3108);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ALabel___empty_init(val_t p0, int* init_table){
-  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
+void parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
+  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos97]) 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 = 4081;
-  fra.me.meth = LOCATE_parser_prod___ALabel___empty_init;
+  fra.me.line = 3112;
+  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;
-  /* ./parser//parser_prod.nit:4081 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos97] = 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 itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALabel].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos98]) 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 = 4083;
-  fra.me.meth = LOCATE_parser_prod___ALabel___init_alabel;
+  fra.me.line = 3114;
+  fra.me.meth = LOCATE_parser_prod___ABlockExpr___init_ablockexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:4088 */
-  CALL_parser_prod___ALabel___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4089 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4089);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ALabel____n_kwlabel(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4090 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4090);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4091 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4091);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ALabel____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4092 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4092);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3118 */
+  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[itpos98] = 1;
+  init_table[itpos106] = 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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:3119 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABlockExpr___init_ablockexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:3120 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:3121 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4147;
+  fra.me.line = 3126;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3128 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4149 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4149);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3128);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4150 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4150);
-        nit_exit(1);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:3128 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:3129 */
+      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);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:4151 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:3130 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:4152 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:3131 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4152);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3131);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:4153 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:3132 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4153);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3132);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:4154 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4154);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3133);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:4156 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:3135 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4156);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3135);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:4158 */
+        /* ./parser//parser_prod.nit:3137 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:4149 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -23491,347 +16609,194 @@ void parser_prod___ABlockExpr___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ABlockExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4163;
+  fra.me.line = 3142;
   fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   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:3144 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4165 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4165);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3144);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:4166 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:4165 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABlockExpr___visit_all_reverse(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 = 4170;
-  fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4173);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:4174 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:4174 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4175 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4175);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:4176 */
-    } else {
-      /* ./parser//parser_prod.nit:4174 */
-      goto label1;
-    }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ABlockExpr___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ABlockExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABlockExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:3145 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABlockExpr___empty_init(val_t p0, int* init_table){
-  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
+void parser_prod___AVardeclExpr___empty_init(val_t p0, int* init_table){
+  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos99]) 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 = 4133;
-  fra.me.meth = LOCATE_parser_prod___ABlockExpr___empty_init;
+  fra.me.line = 3150;
+  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;
-  /* ./parser//parser_prod.nit:4133 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos99] = 1;
+  init_table[itpos107] = 1;
   return;
 }
-void parser_prod___ABlockExpr___init_ablockexpr(val_t p0, val_t p1, int* init_table){
-  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABlockExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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;
+  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[itpos108]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4135;
-  fra.me.meth = LOCATE_parser_prod___ABlockExpr___init_ablockexpr;
+  fra.me.line = 3152;
+  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___init_avardeclexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4139 */
-  CALL_parser_prod___ABlockExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:4140 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4141 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4141);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:4142 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4142);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___ABlockExpr____n_expr(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:4143 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:4140 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:3160 */
+  CALL_parser_prod___AVardeclExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3161 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3161);
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos100] = 1;
-  return;
-}
-void parser_prod___AVardeclExpr___n_kwvar__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4182;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_kwvar__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4184 */
   ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4185 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4187;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4189 */
-  ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4190 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4192;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4194 */
-  ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3162 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4195 */
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3162);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3163 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3163);
+  }
+  ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3164 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3164);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3165 */
+  ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3166 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4196 */
+    /* ./parser//parser_prod.nit:3167 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4196);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3167);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4199;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4201 */
-  ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4202 */
+  /* ./parser//parser_prod.nit:3169 */
+  ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3170 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[4]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4203 */
+    /* ./parser//parser_prod.nit:3171 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4203);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3171);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVardeclExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4206;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4208 */
-  ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4209 */
+  /* ./parser//parser_prod.nit:3173 */
+  ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:3174 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4210 */
+    /* ./parser//parser_prod.nit:3175 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4210);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3175);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -23841,7 +16806,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 = 4243;
+  fra.me.line = 3179;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -23852,13 +16817,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4245 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4245);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 3181);
   }
   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]));
@@ -23868,8 +16831,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4246 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -23883,40 +16846,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4247 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4247);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3183);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3184 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwvar, ID_TKwvar)) /*cast TKwvar*/;
-      /* ./parser//parser_prod.nit:4248 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4248);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3184);
       }
-      /* ./parser//parser_prod.nit:4249 */
+      /* ./parser//parser_prod.nit:3185 */
       ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4251 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4251);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3187 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3187);
     }
-    /* ./parser//parser_prod.nit:4253 */
+    /* ./parser//parser_prod.nit:3189 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3191 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4255 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4255);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3191);
   }
   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]));
@@ -23926,8 +16881,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4256 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -23941,36 +16896,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4257 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4257);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3193);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3194 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:4258 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4258);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3194);
       }
-      /* ./parser//parser_prod.nit:4259 */
+      /* ./parser//parser_prod.nit:3195 */
       ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4261 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4261);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3197 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3197);
     }
-    /* ./parser//parser_prod.nit:4263 */
+    /* ./parser//parser_prod.nit:3199 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3201 */
   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]));
-  /* ./parser//parser_prod.nit:4265 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -23983,8 +16932,8 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3202 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4266 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -23998,34 +16947,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4267 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4267);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3203);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3204 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:4268 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4268);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3204);
       }
-      /* ./parser//parser_prod.nit:4269 */
+      /* ./parser//parser_prod.nit:3205 */
       ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4271 */
+      /* ./parser//parser_prod.nit:3207 */
       ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4273 */
+    /* ./parser//parser_prod.nit:3209 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3211 */
   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]));
-  /* ./parser//parser_prod.nit:4275 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -24038,8 +16983,8 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3212 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4276 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24053,34 +16998,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4277 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4277);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3213);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3214 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:4278 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4278);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3214);
       }
-      /* ./parser//parser_prod.nit:4279 */
+      /* ./parser//parser_prod.nit:3215 */
       ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4281 */
+      /* ./parser//parser_prod.nit:3217 */
       ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4283 */
+    /* ./parser//parser_prod.nit:3219 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3221 */
   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]));
-  /* ./parser//parser_prod.nit:4285 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -24093,8 +17034,8 @@ void parser_prod___AVardeclExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3222 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4286 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24108,29 +17049,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4287 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4287);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3223);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3224 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4288 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4288);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3224);
       }
-      /* ./parser//parser_prod.nit:4289 */
+      /* ./parser//parser_prod.nit:3225 */
       ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4291 */
+      /* ./parser//parser_prod.nit:3227 */
       ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4293 */
+    /* ./parser//parser_prod.nit:3229 */
     goto label1;
   }
   label1: while(0);
@@ -24144,7 +17081,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 = 4297;
+  fra.me.line = 3233;
   fra.me.meth = LOCATE_parser_prod___AVardeclExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24153,29 +17090,25 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4299 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4299);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwvar", LOCATE_parser_prod, 3235);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4300 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4300);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3236);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4301 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24189,20 +17122,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4302 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4302);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3238);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3240 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4304 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24216,20 +17147,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4305 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4305);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3241);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3243 */
   fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4307 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24243,29 +17172,46 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4308 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4308);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3244);
     }
     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___AVardeclExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AReturnExpr___empty_init(val_t p0, int* init_table){
+  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3249;
+  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;
+  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;
   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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4312;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___visit_all_reverse;
+  fra.me.line = 3251;
+  fra.me.meth = LOCATE_parser_prod___AReturnExpr___init_areturnexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -24273,56 +17219,37 @@ void parser_prod___AVardeclExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4314 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwvar");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4314);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4315 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4315);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4316 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:3256 */
+  CALL_parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3257 */
+  ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3258 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4317 */
+    /* ./parser//parser_prod.nit:3259 */
+    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4317);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3259);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3261 */
+  ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3262 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4319 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24336,294 +17263,15 @@ void parser_prod___AVardeclExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4320 */
+    /* ./parser//parser_prod.nit:3263 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4320);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3263);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4322 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4323 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4323);
-      nit_exit(1);
-    }
-    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___AVardeclExpr___empty_init(val_t p0, int* init_table){
-  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVardeclExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 4214;
-  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;
-  /* ./parser//parser_prod.nit:4214 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos101] = 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 itpos102 = 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[itpos102]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4216;
-  fra.me.meth = LOCATE_parser_prod___AVardeclExpr___init_avardeclexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:4224 */
-  CALL_parser_prod___AVardeclExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4225 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4225);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AVardeclExpr____n_kwvar(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4226 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4226);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4227 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4227);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AVardeclExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4228 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4228);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4229 */
-  ATTR_parser_nodes___AVardeclExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4230 */
-  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], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4231 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4231);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:4233 */
-  ATTR_parser_nodes___AVardeclExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4234 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4235 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4235);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:4237 */
-  ATTR_parser_nodes___AVardeclExpr____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4238 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4239 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4239);
-      nit_exit(1);
-    }
-    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[itpos102] = 1;
-  return;
-}
-void parser_prod___AReturnExpr___n_kwreturn__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4328;
-  fra.me.meth = LOCATE_parser_prod___AReturnExpr___n_kwreturn__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4330 */
-  ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4331 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4332 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4332);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AReturnExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4335;
-  fra.me.meth = LOCATE_parser_prod___AReturnExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4337 */
-  ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4338 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4339 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4339);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -24633,7 +17281,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 = 4361;
+  fra.me.line = 3267;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -24644,9 +17292,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:4363 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -24659,8 +17307,8 @@ void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3270 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4364 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24674,34 +17322,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4365 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4365);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3271);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3272 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwreturn, ID_TKwreturn)) /*cast TKwreturn*/;
-      /* ./parser//parser_prod.nit:4366 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4366);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3272);
       }
-      /* ./parser//parser_prod.nit:4367 */
+      /* ./parser//parser_prod.nit:3273 */
       ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4369 */
+      /* ./parser//parser_prod.nit:3275 */
       ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4371 */
+    /* ./parser//parser_prod.nit:3277 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3279 */
   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]));
-  /* ./parser//parser_prod.nit:4373 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -24714,8 +17358,8 @@ void parser_prod___AReturnExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3280 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4374 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24729,29 +17373,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4375 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4375);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3281);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3282 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4376 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4376);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3282);
       }
-      /* ./parser//parser_prod.nit:4377 */
+      /* ./parser//parser_prod.nit:3283 */
       ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4379 */
+      /* ./parser//parser_prod.nit:3285 */
       ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4381 */
+    /* ./parser//parser_prod.nit:3287 */
     goto label1;
   }
   label1: while(0);
@@ -24765,7 +17405,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 = 4385;
+  fra.me.line = 3291;
   fra.me.meth = LOCATE_parser_prod___AReturnExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -24774,82 +17414,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4387 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4388 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4388);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4390 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4391 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4391);
-      nit_exit(1);
-    }
-    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___AReturnExpr___visit_all_reverse(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 = 4395;
-  fra.me.meth = LOCATE_parser_prod___AReturnExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4397 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24863,20 +17430,18 @@ void parser_prod___AReturnExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3294 */
     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*/;
-    /* ./parser//parser_prod.nit:4398 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4398);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3294);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3296 */
   fra.me.REG[2] = ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4400 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24890,89 +17455,75 @@ void parser_prod___AReturnExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3297 */
     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*/;
-    /* ./parser//parser_prod.nit:4401 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4401);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3297);
     }
     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___AReturnExpr___empty_init(val_t p0, int* init_table){
-  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
+void parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
+  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos103]) 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 = 4343;
-  fra.me.meth = LOCATE_parser_prod___AReturnExpr___empty_init;
+  fra.me.line = 3302;
+  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;
-  /* ./parser//parser_prod.nit:4343 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos103] = 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 itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AReturnExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos104]) 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 = 4345;
-  fra.me.meth = LOCATE_parser_prod___AReturnExpr___init_areturnexpr;
+  fra.me.line = 3304;
+  fra.me.meth = LOCATE_parser_prod___ABreakExpr___init_abreakexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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:4350 */
-  CALL_parser_prod___AReturnExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4351 */
-  ATTR_parser_nodes___AReturnExpr____n_kwreturn(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4352 */
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3310 */
+  CALL_parser_prod___ABreakExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3311 */
+  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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3311);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3312 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4353 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4353);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3312);
   }
-  /* ./parser//parser_prod.nit:4355 */
-  ATTR_parser_nodes___AReturnExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3313 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3314 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4356 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -24986,125 +17537,39 @@ 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:3315 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4357 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4357);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3315);
     }
     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;
-  return;
-}
-void parser_prod___ABreakExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4411;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4413 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4414 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4415 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4415);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABreakExpr___n_kwbreak__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4406;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_kwbreak__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4408 */
-  ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4409 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABreakExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4418;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4420 */
-  ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4421 */
+  /* ./parser//parser_prod.nit:3317 */
+  ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3318 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4422 */
+    /* ./parser//parser_prod.nit:3319 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4422);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3319);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25114,7 +17579,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 = 4447;
+  fra.me.line = 3323;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25125,13 +17590,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4449 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4449);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 3325);
   }
   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]));
@@ -25141,8 +17604,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4450 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25156,36 +17619,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4451 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4451);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3327);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3328 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwbreak, ID_TKwbreak)) /*cast TKwbreak*/;
-      /* ./parser//parser_prod.nit:4452 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4452);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3328);
       }
-      /* ./parser//parser_prod.nit:4453 */
+      /* ./parser//parser_prod.nit:3329 */
       ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4455 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4455);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3331 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3331);
     }
-    /* ./parser//parser_prod.nit:4457 */
+    /* ./parser//parser_prod.nit:3333 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3335 */
   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]));
-  /* ./parser//parser_prod.nit:4459 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -25198,8 +17655,8 @@ void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3336 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4460 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25213,34 +17670,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4461 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4461);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3337);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3338 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:4462 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4462);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3338);
       }
-      /* ./parser//parser_prod.nit:4463 */
+      /* ./parser//parser_prod.nit:3339 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4465 */
+      /* ./parser//parser_prod.nit:3341 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4467 */
+    /* ./parser//parser_prod.nit:3343 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3345 */
   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]));
-  /* ./parser//parser_prod.nit:4469 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -25253,8 +17706,8 @@ void parser_prod___ABreakExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3346 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4470 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25268,29 +17721,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4471 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4471);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3347);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3348 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4472 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4472);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3348);
       }
-      /* ./parser//parser_prod.nit:4473 */
+      /* ./parser//parser_prod.nit:3349 */
       ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4475 */
+      /* ./parser//parser_prod.nit:3351 */
       ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4477 */
+    /* ./parser//parser_prod.nit:3353 */
     goto label1;
   }
   label1: while(0);
@@ -25304,7 +17753,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 = 4481;
+  fra.me.line = 3357;
   fra.me.meth = LOCATE_parser_prod___ABreakExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -25313,19 +17762,17 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4483 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4483);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 3359);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4484 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25339,20 +17786,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4485 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4485);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3361);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3363 */
   fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4487 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25366,246 +17811,79 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4488 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4488);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3364);
     }
     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___ABreakExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+void parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
+  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 4492;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___visit_all_reverse;
+  fra.me.line = 3369;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4494 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4494);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4495 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4496 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4496);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4498 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4499 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4499);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
   stack_frame_head = fra.me.prev;
+  init_table[itpos113] = 1;
   return;
 }
-void parser_prod___ABreakExpr___empty_init(val_t p0, int* init_table){
-  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos105]) 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 = 4426;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___empty_init;
+  fra.me.line = 3371;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___init_aabortexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:4426 */
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:3375 */
+  CALL_parser_prod___AAbortExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3376 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3376);
+  }
+  ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3377 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3377);
+  }
+  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[itpos105] = 1;
+  init_table[itpos114] = 1;
   return;
 }
-void parser_prod___ABreakExpr___init_abreakexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakExpr].i;
+void parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  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 = 4428;
-  fra.me.meth = LOCATE_parser_prod___ABreakExpr___init_abreakexpr;
-  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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:4434 */
-  CALL_parser_prod___ABreakExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4435 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4435);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABreakExpr____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4436 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4436);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4437 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4438 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4439 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4439);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:4441 */
-  ATTR_parser_nodes___ABreakExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4442 */
-  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], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4443 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4443);
-      nit_exit(1);
-    }
-    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[itpos106] = 1;
-  return;
-}
-void parser_prod___AAbortExpr___n_kwabort__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4504;
-  fra.me.meth = LOCATE_parser_prod___AAbortExpr___n_kwabort__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4506 */
-  ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4507 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAbortExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 4521;
-  fra.me.meth = LOCATE_parser_prod___AAbortExpr___replace_child;
+  fra.me.line = 3380;
+  fra.me.meth = LOCATE_parser_prod___AAbortExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -25615,13 +17893,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4523 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4523);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser_prod, 3382);
   }
   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]));
@@ -25631,8 +17907,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4524 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25646,31 +17922,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4525 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4525);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3384);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3385 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwabort, ID_TKwabort)) /*cast TKwabort*/;
-      /* ./parser//parser_prod.nit:4526 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4526);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3385);
       }
-      /* ./parser//parser_prod.nit:4527 */
+      /* ./parser//parser_prod.nit:3386 */
       ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4529 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4529);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3388 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3388);
     }
-    /* ./parser//parser_prod.nit:4531 */
+    /* ./parser//parser_prod.nit:3390 */
     goto label1;
   }
   label1: while(0);
@@ -25683,7 +17953,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 = 4535;
+  fra.me.line = 3394;
   fra.me.meth = LOCATE_parser_prod___AAbortExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -25691,122 +17961,61 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4537 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4537);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAbortExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4540;
-  fra.me.meth = LOCATE_parser_prod___AAbortExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4542 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwabort");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4542);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwabort", LOCATE_parser_prod, 3396);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAbortExpr___empty_init(val_t p0, int* init_table){
-  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAbortExpr].i;
+void parser_prod___AContinueExpr___empty_init(val_t p0, int* init_table){
+  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos107]) 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 = 4510;
-  fra.me.meth = LOCATE_parser_prod___AAbortExpr___empty_init;
+  fra.me.line = 3400;
+  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;
-  /* ./parser//parser_prod.nit:4510 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos107] = 1;
-  return;
-}
-void parser_prod___AAbortExpr___init_aabortexpr(val_t p0, val_t p1, int* init_table){
-  int itpos108 = 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[itpos108]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4512;
-  fra.me.meth = LOCATE_parser_prod___AAbortExpr___init_aabortexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4516 */
-  CALL_parser_prod___AAbortExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4517 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4517);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAbortExpr____n_kwabort(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4518 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4518);
-    nit_exit(1);
-  }
-  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[itpos108] = 1;
+  init_table[itpos115] = 1;
   return;
 }
-void parser_prod___AContinueExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4553;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_label__eq;
+  fra.me.line = 3402;
+  fra.me.meth = LOCATE_parser_prod___AContinueExpr___init_acontinueexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:4555 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:3408 */
+  CALL_parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3409 */
+  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3410 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4556 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -25820,104 +18029,63 @@ void parser_prod___AContinueExpr___n_label__eq(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3411 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4557 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4557);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3411);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AContinueExpr___n_kwcontinue__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4546;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_kwcontinue__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4548 */
-  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4549 */
+  /* ./parser//parser_prod.nit:3413 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3414 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4550 */
+    /* ./parser//parser_prod.nit:3415 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4550);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3415);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AContinueExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4560;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4562 */
-  ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4563 */
+  /* ./parser//parser_prod.nit:3417 */
+  ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3418 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4564 */
+    /* ./parser//parser_prod.nit:3419 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4564);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3419);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -25927,7 +18095,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 = 4591;
+  fra.me.line = 3423;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -25938,9 +18106,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:4593 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -25953,8 +18121,8 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3426 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4594 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -25968,34 +18136,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4595 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4595);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3427);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3428 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast TKwcontinue*/;
-      /* ./parser//parser_prod.nit:4596 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4596);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3428);
       }
-      /* ./parser//parser_prod.nit:4597 */
+      /* ./parser//parser_prod.nit:3429 */
       ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4599 */
+      /* ./parser//parser_prod.nit:3431 */
       ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4601 */
+    /* ./parser//parser_prod.nit:3433 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3435 */
   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]));
-  /* ./parser//parser_prod.nit:4603 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -26008,8 +18172,8 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3436 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4604 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26023,34 +18187,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4605 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4605);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3437);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3438 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:4606 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4606);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3438);
       }
-      /* ./parser//parser_prod.nit:4607 */
+      /* ./parser//parser_prod.nit:3439 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4609 */
+      /* ./parser//parser_prod.nit:3441 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4611 */
+    /* ./parser//parser_prod.nit:3443 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3445 */
   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]));
-  /* ./parser//parser_prod.nit:4613 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -26063,8 +18223,8 @@ void parser_prod___AContinueExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3446 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4614 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26078,29 +18238,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4615 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4615);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3447);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3448 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4616 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4616);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3448);
       }
-      /* ./parser//parser_prod.nit:4617 */
+      /* ./parser//parser_prod.nit:3449 */
       ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4619 */
+      /* ./parser//parser_prod.nit:3451 */
       ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4621 */
+    /* ./parser//parser_prod.nit:3453 */
     goto label1;
   }
   label1: while(0);
@@ -26114,7 +18270,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 = 4625;
+  fra.me.line = 3457;
   fra.me.meth = LOCATE_parser_prod___AContinueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26123,109 +18279,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4627 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4628 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4628);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4630 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4631 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4631);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4633 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4634 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4634);
-      nit_exit(1);
-    }
-    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___AContinueExpr___visit_all_reverse(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 = 4638;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4640 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26239,20 +18295,18 @@ void parser_prod___AContinueExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3460 */
     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*/;
-    /* ./parser//parser_prod.nit:4641 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4641);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3460);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3462 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4643 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26266,20 +18320,18 @@ void parser_prod___AContinueExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3463 */
     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*/;
-    /* ./parser//parser_prod.nit:4644 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4644);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3463);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3465 */
   fra.me.REG[2] = ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4646 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26293,49 +18345,46 @@ void parser_prod___AContinueExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3466 */
     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*/;
-    /* ./parser//parser_prod.nit:4647 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4647);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3466);
     }
     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___AContinueExpr___empty_init(val_t p0, int* init_table){
-  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+void parser_prod___ADoExpr___empty_init(val_t p0, int* init_table){
+  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos109]) 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 = 4568;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___empty_init;
+  fra.me.line = 3471;
+  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;
-  /* ./parser//parser_prod.nit:4568 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos109] = 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 itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AContinueExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos110]) 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 = 4570;
-  fra.me.meth = LOCATE_parser_prod___AContinueExpr___init_acontinueexpr;
+  fra.me.line = 3473;
+  fra.me.meth = LOCATE_parser_prod___ADoExpr___init_adoexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -26346,38 +18395,25 @@ 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:4576 */
-  CALL_parser_prod___AContinueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:4577 */
-  ATTR_parser_nodes___AContinueExpr____n_kwcontinue(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4578 */
+  /* ./parser//parser_prod.nit:3479 */
+  CALL_parser_prod___ADoExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3480 */
+  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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3480);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3481 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4579 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4579);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3481);
   }
-  /* ./parser//parser_prod.nit:4581 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3482 */
+  ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3483 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4582 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26391,19 +18427,17 @@ 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:3484 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4583 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4583);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3484);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  /* ./parser//parser_prod.nit:4585 */
-  ATTR_parser_nodes___AContinueExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3486 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3487 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4586 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -26417,125 +18451,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:3488 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4587 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4587);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3488);
     }
     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[itpos110] = 1;
-  return;
-}
-void parser_prod___ADoExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4664;
-  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4666 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4667 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4668 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4668);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADoExpr___n_kwdo__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4652;
-  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_kwdo__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4654 */
-  ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4655 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADoExpr___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4657;
-  fra.me.meth = LOCATE_parser_prod___ADoExpr___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4659 */
-  ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4660 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4661 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4661);
-      nit_exit(1);
-    }
-    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[itpos118] = 1;
   return;
 }
 void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -26545,7 +18469,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 = 4693;
+  fra.me.line = 3492;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -26556,13 +18480,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4695 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4695);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3494);
   }
   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]));
@@ -26572,8 +18494,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4696 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26587,36 +18509,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4697 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4697);
-        nit_exit(1);
+        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:3497 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      /* ./parser//parser_prod.nit:4698 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4698);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3497);
       }
-      /* ./parser//parser_prod.nit:4699 */
+      /* ./parser//parser_prod.nit:3498 */
       ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4701 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4701);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3500 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3500);
     }
-    /* ./parser//parser_prod.nit:4703 */
+    /* ./parser//parser_prod.nit:3502 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3504 */
   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]));
-  /* ./parser//parser_prod.nit:4705 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -26629,8 +18545,8 @@ void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3505 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4706 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26644,34 +18560,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4707 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4707);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3506);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3507 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4708 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4708);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3507);
       }
-      /* ./parser//parser_prod.nit:4709 */
+      /* ./parser//parser_prod.nit:3508 */
       ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4711 */
+      /* ./parser//parser_prod.nit:3510 */
       ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4713 */
+    /* ./parser//parser_prod.nit:3512 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3514 */
   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]));
-  /* ./parser//parser_prod.nit:4715 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -26684,8 +18596,8 @@ void parser_prod___ADoExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3515 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4716 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26699,29 +18611,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4717 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4717);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3516);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3517 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:4718 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4718);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3517);
       }
-      /* ./parser//parser_prod.nit:4719 */
+      /* ./parser//parser_prod.nit:3518 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4721 */
+      /* ./parser//parser_prod.nit:3520 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4723 */
+    /* ./parser//parser_prod.nit:3522 */
     goto label1;
   }
   label1: while(0);
@@ -26735,7 +18643,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 = 4727;
+  fra.me.line = 3526;
   fra.me.meth = LOCATE_parser_prod___ADoExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -26744,19 +18652,17 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4729 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4729);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3528);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4730 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26770,20 +18676,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4731 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4731);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3530);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3532 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4733 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -26797,343 +18701,136 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:4734 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4734);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3533);
     }
     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___ADoExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AIfExpr___empty_init(val_t p0, int* init_table){
+  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3538;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
+  if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4738;
-  fra.me.meth = LOCATE_parser_prod___ADoExpr___visit_all_reverse;
+  fra.me.line = 3540;
+  fra.me.meth = LOCATE_parser_prod___AIfExpr___init_aifexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4740 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:3547 */
+  CALL_parser_prod___AIfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3548 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4740);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3548);
   }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]);
+  ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3549 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3549);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3550 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3550);
+  }
+  ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3551 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4741 */
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3551);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3552 */
+  ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3553 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4742 */
+    /* ./parser//parser_prod.nit:3554 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4742);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3554);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4744 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4745 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4745);
-      nit_exit(1);
-    }
-    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___ADoExpr___empty_init(val_t p0, int* init_table){
-  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 4672;
-  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;
-  /* ./parser//parser_prod.nit:4672 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos111] = 1;
-  return;
-}
-void parser_prod___ADoExpr___init_adoexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos112 = 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[itpos112]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4674;
-  fra.me.meth = LOCATE_parser_prod___ADoExpr___init_adoexpr;
-  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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:4680 */
-  CALL_parser_prod___ADoExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4681 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4681);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ADoExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4682 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4682);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4683 */
-  ATTR_parser_nodes___ADoExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4684 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4685 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4685);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:4687 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4688 */
-  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], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4689 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4689);
-      nit_exit(1);
-    }
-    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;
-  return;
-}
-void parser_prod___AIfExpr___n_kwif__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4750;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_kwif__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4752 */
-  ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4753 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4755;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4757 */
-  ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4758 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_then__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4760;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_then__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4762 */
-  ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4763 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4764 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4764);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfExpr___n_else__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4767;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___n_else__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4769 */
-  ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4770 */
+  /* ./parser//parser_prod.nit:3556 */
+  ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3557 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[4]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4771 */
+    /* ./parser//parser_prod.nit:3558 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4771);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3558);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -27143,7 +18840,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 = 4799;
+  fra.me.line = 3562;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27154,13 +18851,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4801 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4801);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3564);
   }
   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]));
@@ -27170,8 +18865,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4802 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27185,40 +18880,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4803 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4803);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3566);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3567 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
-      /* ./parser//parser_prod.nit:4804 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4804);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3567);
       }
-      /* ./parser//parser_prod.nit:4805 */
+      /* ./parser//parser_prod.nit:3568 */
       ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4807 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4807);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3570 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3570);
     }
-    /* ./parser//parser_prod.nit:4809 */
+    /* ./parser//parser_prod.nit:3572 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3574 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4811 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4811);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3574);
   }
   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]));
@@ -27228,8 +18915,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4812 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27243,36 +18930,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4813 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4813);
-        nit_exit(1);
+        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:3577 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4814 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4814);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3577);
       }
-      /* ./parser//parser_prod.nit:4815 */
+      /* ./parser//parser_prod.nit:3578 */
       ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4817 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4817);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3580 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3580);
     }
-    /* ./parser//parser_prod.nit:4819 */
+    /* ./parser//parser_prod.nit:3582 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3584 */
   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]));
-  /* ./parser//parser_prod.nit:4821 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -27285,8 +18966,8 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3585 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4822 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27300,34 +18981,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4823 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4823);
-        nit_exit(1);
+        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:3587 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4824 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4824);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3587);
       }
-      /* ./parser//parser_prod.nit:4825 */
+      /* ./parser//parser_prod.nit:3588 */
       ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4827 */
+      /* ./parser//parser_prod.nit:3590 */
       ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4829 */
+    /* ./parser//parser_prod.nit:3592 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3594 */
   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]));
-  /* ./parser//parser_prod.nit:4831 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -27340,8 +19017,8 @@ void parser_prod___AIfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3595 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4832 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27355,29 +19032,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4833 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4833);
-        nit_exit(1);
+        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:3597 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4834 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4834);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3597);
       }
-      /* ./parser//parser_prod.nit:4835 */
+      /* ./parser//parser_prod.nit:3598 */
       ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4837 */
+      /* ./parser//parser_prod.nit:3600 */
       ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:4839 */
+    /* ./parser//parser_prod.nit:3602 */
     goto label1;
   }
   label1: while(0);
@@ -27391,7 +19064,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 = 4843;
+  fra.me.line = 3606;
   fra.me.meth = LOCATE_parser_prod___AIfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -27400,122 +19073,25 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4845 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4845);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4846 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4846);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4847 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4848 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4848);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4850 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:4851 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4851);
-      nit_exit(1);
-    }
-    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___AIfExpr___visit_all_reverse(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 = 4855;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4857 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4857);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3608);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4858 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4858);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3609);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4859 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27529,20 +19105,18 @@ void parser_prod___AIfExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3611 */
     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*/;
-    /* ./parser//parser_prod.nit:4860 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4860);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3611);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3613 */
   fra.me.REG[2] = ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4862 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27556,271 +19130,143 @@ void parser_prod___AIfExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3614 */
     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*/;
-    /* ./parser//parser_prod.nit:4863 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4863);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3614);
     }
     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___AIfExpr___empty_init(val_t p0, int* init_table){
-  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
+void parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
+  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos113]) 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 = 4775;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___empty_init;
+  fra.me.line = 3619;
+  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;
-  /* ./parser//parser_prod.nit:4775 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos113] = 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 itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos114]) 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 = 4777;
-  fra.me.meth = LOCATE_parser_prod___AIfExpr___init_aifexpr;
+  fra.me.line = 3621;
+  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___init_aifexprexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:4784 */
-  CALL_parser_prod___AIfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:3630 */
+  CALL_parser_prod___AIfexprExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3631 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4785 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4785);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3631);
   }
-  ATTR_parser_nodes___AIfExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3632 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4786 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4786);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3632);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3633 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4787 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4787);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3633);
   }
-  ATTR_parser_nodes___AIfExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3634 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4788 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4788);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3634);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:4789 */
-  ATTR_parser_nodes___AIfExpr____n_then(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4790 */
+  /* ./parser//parser_prod.nit:3635 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3635);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3636 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4791 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4791);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3636);
   }
-  /* ./parser//parser_prod.nit:4793 */
-  ATTR_parser_nodes___AIfExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3637 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3637);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3638 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4794 */
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3638);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3639 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3639);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:3640 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4795 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4795);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3640);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3641 */
+  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3641);
+  }
+  ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:3642 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3642);
+  }
+  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[itpos114] = 1;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwif__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4868;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwif__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4870 */
-  ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4871 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4873;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4875 */
-  ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4876 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwthen__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4878;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwthen__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4880 */
-  ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4881 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_then__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4883;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_then__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4885 */
-  ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4886 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_kwelse__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4888;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_kwelse__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4890 */
-  ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4891 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___n_else__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4893;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___n_else__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:4895 */
-  ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:4896 */
-  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[itpos122] = 1;
   return;
 }
 void parser_prod___AIfexprExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -27830,7 +19276,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 = 4925;
+  fra.me.line = 3645;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -27841,13 +19287,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4927 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4927);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3647);
   }
   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]));
@@ -27857,8 +19301,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4928 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27872,40 +19316,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4929 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4929);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3649);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3650 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwif, ID_TKwif)) /*cast TKwif*/;
-      /* ./parser//parser_prod.nit:4930 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4930);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3650);
       }
-      /* ./parser//parser_prod.nit:4931 */
+      /* ./parser//parser_prod.nit:3651 */
       ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4933 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4933);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3653 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3653);
     }
-    /* ./parser//parser_prod.nit:4935 */
+    /* ./parser//parser_prod.nit:3655 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3657 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4937 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4937);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3657);
   }
   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]));
@@ -27915,8 +19351,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4938 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27930,40 +19366,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4939 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4939);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3659);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3660 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4940 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4940);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3660);
       }
-      /* ./parser//parser_prod.nit:4941 */
+      /* ./parser//parser_prod.nit:3661 */
       ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4943 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4943);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3663 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3663);
     }
-    /* ./parser//parser_prod.nit:4945 */
+    /* ./parser//parser_prod.nit:3665 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3667 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4947 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4947);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser_prod, 3667);
   }
   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]));
@@ -27973,8 +19401,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4948 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -27988,40 +19416,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4949 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4949);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3669);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3670 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwthen, ID_TKwthen)) /*cast TKwthen*/;
-      /* ./parser//parser_prod.nit:4950 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4950);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3670);
       }
-      /* ./parser//parser_prod.nit:4951 */
+      /* ./parser//parser_prod.nit:3671 */
       ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4953 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4953);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3673 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3673);
     }
-    /* ./parser//parser_prod.nit:4955 */
+    /* ./parser//parser_prod.nit:3675 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3677 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4957 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4957);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser_prod, 3677);
   }
   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]));
@@ -28031,8 +19451,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4958 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28046,40 +19466,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4959 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4959);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3679);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3680 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4960 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4960);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3680);
       }
-      /* ./parser//parser_prod.nit:4961 */
+      /* ./parser//parser_prod.nit:3681 */
       ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4963 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4963);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3683 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3683);
     }
-    /* ./parser//parser_prod.nit:4965 */
+    /* ./parser//parser_prod.nit:3685 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3687 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4967 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4967);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser_prod, 3687);
   }
   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]));
@@ -28089,8 +19501,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4968 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28104,40 +19516,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4969 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4969);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3689);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3690 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwelse, ID_TKwelse)) /*cast TKwelse*/;
-      /* ./parser//parser_prod.nit:4970 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4970);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3690);
       }
-      /* ./parser//parser_prod.nit:4971 */
+      /* ./parser//parser_prod.nit:3691 */
       ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4973 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4973);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3693 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3693);
     }
-    /* ./parser//parser_prod.nit:4975 */
+    /* ./parser//parser_prod.nit:3695 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3697 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4977 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4977);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser_prod, 3697);
   }
   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]));
@@ -28147,8 +19551,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:4978 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28162,31 +19566,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:4979 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4979);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3699);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3700 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:4980 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4980);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3700);
       }
-      /* ./parser//parser_prod.nit:4981 */
+      /* ./parser//parser_prod.nit:3701 */
       ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:4983 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4983);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3703 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3703);
     }
-    /* ./parser//parser_prod.nit:4985 */
+    /* ./parser//parser_prod.nit:3705 */
     goto label1;
   }
   label1: while(0);
@@ -28199,7 +19597,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 = 4989;
+  fra.me.line = 3709;
   fra.me.meth = LOCATE_parser_prod___AIfexprExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28208,445 +19606,190 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4991 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4991);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwif", LOCATE_parser_prod, 3711);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4992 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4992);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3712);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4993 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4993);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwthen", LOCATE_parser_prod, 3713);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4994 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4994);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_then", LOCATE_parser_prod, 3714);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4995 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4995);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwelse", LOCATE_parser_prod, 3715);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4996 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4996);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_else", LOCATE_parser_prod, 3716);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIfexprExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AWhileExpr___empty_init(val_t p0, int* init_table){
+  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3720;
+  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;
+  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;
+  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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4999;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___visit_all_reverse;
+  fra.me.line = 3722;
+  fra.me.meth = LOCATE_parser_prod___AWhileExpr___init_awhileexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 6;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5001 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwif");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5001);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5002 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5002);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5003 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwthen");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5003);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5004 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_then");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5004);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5005 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwelse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5005);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5006 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_else");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5006);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIfexprExpr___empty_init(val_t p0, int* init_table){
-  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIfexprExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 4899;
-  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;
-  /* ./parser//parser_prod.nit:4899 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos115] = 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 itpos116 = 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[itpos116]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 4901;
-  fra.me.meth = LOCATE_parser_prod___AIfexprExpr___init_aifexprexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
-  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[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
   fra.me.REG[5] = p5;
-  fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:4910 */
-  CALL_parser_prod___AIfexprExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3730 */
+  CALL_parser_prod___AWhileExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3731 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4911 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4911);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3731);
   }
-  ATTR_parser_nodes___AIfexprExpr____n_kwif(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3732 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4912 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4912);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3732);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3733 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4913 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4913);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3733);
   }
-  ATTR_parser_nodes___AIfexprExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3734 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4914 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4914);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3734);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3735 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4915 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4915);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3735);
   }
-  ATTR_parser_nodes___AIfexprExpr____n_kwthen(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3736 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4916 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4916);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3736);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4917 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4917);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AIfexprExpr____n_then(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3737 */
+  ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3738 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4918 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4918);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4919 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4919);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AIfexprExpr____n_kwelse(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4920 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4920);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[6]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:4921 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4921);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AIfexprExpr____n_else(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:4922 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 4922);
-    nit_exit(1);
-  }
-  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[itpos116] = 1;
-  return;
-}
-void parser_prod___AWhileExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5032;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5034 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5035 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[4]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5036 */
+    /* ./parser//parser_prod.nit:3739 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5036);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3739);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_kwwhile__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5010;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_kwwhile__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5012 */
-  ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5013 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5015;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5017 */
-  ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5018 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_kwdo__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5020;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_kwdo__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5022 */
-  ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5023 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AWhileExpr___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5025;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5027 */
-  ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5028 */
+  /* ./parser//parser_prod.nit:3741 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:3742 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5029 */
+    /* ./parser//parser_prod.nit:3743 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5029);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3743);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -28656,7 +19799,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 = 5067;
+  fra.me.line = 3747;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -28667,13 +19810,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5069 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5069);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser_prod, 3749);
   }
   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]));
@@ -28683,8 +19824,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5070 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28698,40 +19839,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5071 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5071);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3751);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3752 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwwhile, ID_TKwwhile)) /*cast TKwwhile*/;
-      /* ./parser//parser_prod.nit:5072 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5072);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3752);
       }
-      /* ./parser//parser_prod.nit:5073 */
+      /* ./parser//parser_prod.nit:3753 */
       ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5075 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5075);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3755 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3755);
     }
-    /* ./parser//parser_prod.nit:5077 */
+    /* ./parser//parser_prod.nit:3757 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3759 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5079 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5079);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3759);
   }
   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]));
@@ -28741,8 +19874,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5080 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28756,40 +19889,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5081 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5081);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3761);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3762 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5082 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5082);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3762);
       }
-      /* ./parser//parser_prod.nit:5083 */
+      /* ./parser//parser_prod.nit:3763 */
       ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5085 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5085);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3765 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3765);
     }
-    /* ./parser//parser_prod.nit:5087 */
+    /* ./parser//parser_prod.nit:3767 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3769 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5089 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5089);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3769);
   }
   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]));
@@ -28799,8 +19924,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5090 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28814,36 +19939,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5091 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5091);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3771);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3772 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      /* ./parser//parser_prod.nit:5092 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5092);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3772);
       }
-      /* ./parser//parser_prod.nit:5093 */
+      /* ./parser//parser_prod.nit:3773 */
       ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5095 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5095);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3775 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3775);
     }
-    /* ./parser//parser_prod.nit:5097 */
+    /* ./parser//parser_prod.nit:3777 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3779 */
   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]));
-  /* ./parser//parser_prod.nit:5099 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -28856,8 +19975,8 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3780 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5100 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28871,34 +19990,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5101 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5101);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3781);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3782 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5102 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5102);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3782);
       }
-      /* ./parser//parser_prod.nit:5103 */
+      /* ./parser//parser_prod.nit:3783 */
       ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5105 */
+      /* ./parser//parser_prod.nit:3785 */
       ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5107 */
+    /* ./parser//parser_prod.nit:3787 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3789 */
   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]));
-  /* ./parser//parser_prod.nit:5109 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -28911,8 +20026,8 @@ void parser_prod___AWhileExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3790 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5110 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -28926,29 +20041,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5111 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5111);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3791);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3792 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:5112 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5112);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3792);
       }
-      /* ./parser//parser_prod.nit:5113 */
+      /* ./parser//parser_prod.nit:3793 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5115 */
+      /* ./parser//parser_prod.nit:3795 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5117 */
+    /* ./parser//parser_prod.nit:3797 */
     goto label1;
   }
   label1: while(0);
@@ -28962,7 +20073,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 = 5121;
+  fra.me.line = 3801;
   fra.me.meth = LOCATE_parser_prod___AWhileExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -28971,142 +20082,33 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5123);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5124 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5124);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5125 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5125);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5126 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5127 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5127);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5129 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5130 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5130);
-      nit_exit(1);
-    }
-    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___AWhileExpr___visit_all_reverse(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 = 5134;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5136 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwwhile");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5136);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwwhile", LOCATE_parser_prod, 3803);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5137 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5137);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3804);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5138 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5138);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3805);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5139 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29120,20 +20122,18 @@ void parser_prod___AWhileExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3807 */
     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*/;
-    /* ./parser//parser_prod.nit:5140 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5140);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3807);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3809 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5142 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29147,278 +20147,121 @@ void parser_prod___AWhileExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3810 */
     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*/;
-    /* ./parser//parser_prod.nit:5143 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5143);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3810);
     }
     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___AWhileExpr___empty_init(val_t p0, int* init_table){
-  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
+void parser_prod___ALoopExpr___empty_init(val_t p0, int* init_table){
+  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos117]) 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 = 5040;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___empty_init;
+  fra.me.line = 3815;
+  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;
-  /* ./parser//parser_prod.nit:5040 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos117] = 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 itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AWhileExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  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[itpos126]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5042;
-  fra.me.meth = LOCATE_parser_prod___AWhileExpr___init_awhileexpr;
+  fra.me.line = 3817;
+  fra.me.meth = LOCATE_parser_prod___ALoopExpr___init_aloopexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:5050 */
-  CALL_parser_prod___AWhileExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3823 */
+  CALL_parser_prod___ALoopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3824 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5051 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5051);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3824);
   }
-  ATTR_parser_nodes___AWhileExpr____n_kwwhile(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3825 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5052 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5052);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3825);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5053);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AWhileExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3826 */
+  ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3827 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5054 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5054);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5055 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5055);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AWhileExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5056 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5056);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5057 */
-  ATTR_parser_nodes___AWhileExpr____n_block(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5058 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5059 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5059);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  }
-  /* ./parser//parser_prod.nit:5061 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5062 */
   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)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5063 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5063);
-      nit_exit(1);
-    }
-    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[itpos118] = 1;
-  return;
-}
-void parser_prod___ALoopExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5160;
-  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5162 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5163 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5164 */
+    /* ./parser//parser_prod.nit:3828 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5164);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3828);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALoopExpr___n_kwloop__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5148;
-  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_kwloop__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5150 */
-  ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5151 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALoopExpr___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5153;
-  fra.me.meth = LOCATE_parser_prod___ALoopExpr___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5155 */
-  ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5156 */
+  /* ./parser//parser_prod.nit:3830 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3831 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5157 */
+    /* ./parser//parser_prod.nit:3832 */
+    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5157);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3832);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -29428,7 +20271,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 = 5189;
+  fra.me.line = 3836;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -29439,13 +20282,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5191 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5191);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser_prod, 3838);
   }
   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]));
@@ -29455,8 +20296,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5192 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29470,36 +20311,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5193 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5193);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3840);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3841 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwloop, ID_TKwloop)) /*cast TKwloop*/;
-      /* ./parser//parser_prod.nit:5194 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5194);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3841);
       }
-      /* ./parser//parser_prod.nit:5195 */
+      /* ./parser//parser_prod.nit:3842 */
       ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5197 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5197);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3844 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3844);
     }
-    /* ./parser//parser_prod.nit:5199 */
+    /* ./parser//parser_prod.nit:3846 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3848 */
   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]));
-  /* ./parser//parser_prod.nit:5201 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -29512,8 +20347,8 @@ void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3849 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5202 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29527,34 +20362,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5203 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5203);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3850);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3851 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5204 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5204);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3851);
       }
-      /* ./parser//parser_prod.nit:5205 */
+      /* ./parser//parser_prod.nit:3852 */
       ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5207 */
+      /* ./parser//parser_prod.nit:3854 */
       ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5209 */
+    /* ./parser//parser_prod.nit:3856 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3858 */
   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]));
-  /* ./parser//parser_prod.nit:5211 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -29567,8 +20398,8 @@ void parser_prod___ALoopExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3859 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5212 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29582,29 +20413,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5213 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5213);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3860);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3861 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:5214 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5214);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3861);
       }
-      /* ./parser//parser_prod.nit:5215 */
+      /* ./parser//parser_prod.nit:3862 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5217 */
+      /* ./parser//parser_prod.nit:3864 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5219 */
+    /* ./parser//parser_prod.nit:3866 */
     goto label1;
   }
   label1: while(0);
@@ -29618,7 +20445,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 = 5223;
+  fra.me.line = 3870;
   fra.me.meth = LOCATE_parser_prod___ALoopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -29627,19 +20454,17 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5225 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5225);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwloop", LOCATE_parser_prod, 3872);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5226 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29653,20 +20478,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:5227 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5227);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3874);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3876 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5229 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -29680,383 +20503,166 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:5230 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5230);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3877);
     }
     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___ALoopExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
+  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3882;
+  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;
+  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;
+  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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5234;
-  fra.me.meth = LOCATE_parser_prod___ALoopExpr___visit_all_reverse;
+  fra.me.line = 3884;
+  fra.me.meth = LOCATE_parser_prod___AForExpr___init_aforexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 7;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwloop");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5236);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5237 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5238 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5238);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5240 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5241 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5241);
-      nit_exit(1);
-    }
-    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___ALoopExpr___empty_init(val_t p0, int* init_table){
-  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALoopExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 5168;
-  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;
-  /* ./parser//parser_prod.nit:5168 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos119] = 1;
-  return;
-}
-void parser_prod___ALoopExpr___init_aloopexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos120 = 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[itpos120]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5170;
-  fra.me.meth = LOCATE_parser_prod___ALoopExpr___init_aloopexpr;
-  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[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:5176 */
-  CALL_parser_prod___ALoopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:3893 */
+  CALL_parser_prod___AForExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:3894 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5177 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5177);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3894);
   }
-  ATTR_parser_nodes___ALoopExpr____n_kwloop(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:3895 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5178 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5178);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3895);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5179 */
-  ATTR_parser_nodes___ALoopExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5180 */
+  /* ./parser//parser_prod.nit:3896 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3896);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:3897 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5181 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5181);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3897);
   }
-  /* ./parser//parser_prod.nit:5183 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[3];
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3898 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3898);
+  }
+  ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:3899 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5184 */
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3899);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3900 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3900);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:3901 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5185 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5185);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3901);
   }
-  stack_frame_head = fra.me.prev;
-  init_table[itpos120] = 1;
-  return;
-}
-void parser_prod___AForExpr___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5273;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5275 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5276 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:3902 */
+  ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:3903 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5277 */
+    /* ./parser//parser_prod.nit:3904 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5277);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3904);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AForExpr___n_kwfor__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5246;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_kwfor__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5248 */
-  ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5249 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AForExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5251;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5253 */
-  ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5254 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AForExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5256;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5258 */
-  ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5259 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AForExpr___n_kwdo__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5261;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_kwdo__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5263 */
-  ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5264 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AForExpr___n_block__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5266;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___n_block__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5268 */
-  ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5269 */
+  /* ./parser//parser_prod.nit:3906 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:3907 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[6]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5270 */
+    /* ./parser//parser_prod.nit:3908 */
+    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5270);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3908);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
 void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -30066,7 +20672,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 = 5311;
+  fra.me.line = 3912;
   fra.me.meth = LOCATE_parser_prod___AForExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -30077,13 +20683,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5313 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5313);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser_prod, 3914);
   }
   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]));
@@ -30093,8 +20697,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5314 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30108,40 +20712,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5315 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5315);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3916);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3917 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfor, ID_TKwfor)) /*cast TKwfor*/;
-      /* ./parser//parser_prod.nit:5316 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5316);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3917);
       }
-      /* ./parser//parser_prod.nit:5317 */
+      /* ./parser//parser_prod.nit:3918 */
       ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5319 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5319);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3920 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3920);
     }
-    /* ./parser//parser_prod.nit:5321 */
+    /* ./parser//parser_prod.nit:3922 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3924 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5323 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5323);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3924);
   }
   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]));
@@ -30151,8 +20747,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5324 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30166,40 +20762,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5325 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5325);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3926);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3927 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:5326 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5326);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3927);
       }
-      /* ./parser//parser_prod.nit:5327 */
+      /* ./parser//parser_prod.nit:3928 */
       ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5329 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5329);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3930 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3930);
     }
-    /* ./parser//parser_prod.nit:5331 */
+    /* ./parser//parser_prod.nit:3932 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3934 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5333 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5333);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3934);
   }
   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]));
@@ -30209,8 +20797,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5334 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30224,40 +20812,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5335 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5335);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3936);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3937 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5336 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5336);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3937);
       }
-      /* ./parser//parser_prod.nit:5337 */
+      /* ./parser//parser_prod.nit:3938 */
       ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5339 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5339);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3940 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3940);
     }
-    /* ./parser//parser_prod.nit:5341 */
+    /* ./parser//parser_prod.nit:3942 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3944 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5343 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5343);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3944);
   }
   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]));
@@ -30267,8 +20847,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5344 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30282,36 +20862,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5345 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5345);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3946);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3947 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      /* ./parser//parser_prod.nit:5346 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5346);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3947);
       }
-      /* ./parser//parser_prod.nit:5347 */
+      /* ./parser//parser_prod.nit:3948 */
       ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5349 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5349);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:3950 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 3950);
     }
-    /* ./parser//parser_prod.nit:5351 */
+    /* ./parser//parser_prod.nit:3952 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3954 */
   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]));
-  /* ./parser//parser_prod.nit:5353 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -30324,8 +20898,8 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3955 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5354 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30339,34 +20913,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5355 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5355);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3956);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3957 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5356 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5356);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3957);
       }
-      /* ./parser//parser_prod.nit:5357 */
+      /* ./parser//parser_prod.nit:3958 */
       ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5359 */
+      /* ./parser//parser_prod.nit:3960 */
       ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5361 */
+    /* ./parser//parser_prod.nit:3962 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:3964 */
   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]));
-  /* ./parser//parser_prod.nit:5363 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -30379,8 +20949,8 @@ void parser_prod___AForExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:3965 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5364 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30394,29 +20964,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5365 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5365);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 3966);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:3967 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:5366 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5366);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 3967);
       }
-      /* ./parser//parser_prod.nit:5367 */
+      /* ./parser//parser_prod.nit:3968 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5369 */
+      /* ./parser//parser_prod.nit:3970 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5371 */
+    /* ./parser//parser_prod.nit:3972 */
     goto label1;
   }
   label1: while(0);
@@ -30430,7 +20996,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 = 5375;
+  fra.me.line = 3976;
   fra.me.meth = LOCATE_parser_prod___AForExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -30439,49 +21005,41 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5377 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5377);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwfor", LOCATE_parser_prod, 3978);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5378 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5378);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 3979);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5379 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5379);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 3980);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5380 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5380);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwdo", LOCATE_parser_prod, 3981);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5381 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30495,20 +21053,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:5382 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5382);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3983);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:3985 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5384 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30522,79 +21078,77 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:5385 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5385);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 3986);
     }
     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___AForExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AAssertExpr___empty_init(val_t p0, int* init_table){
+  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 3991;
+  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;
+  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;
+  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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5389;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___visit_all_reverse;
+  fra.me.line = 3993;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___init_aassertexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5391 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfor");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5391);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5392 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5392);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5393 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:4000 */
+  CALL_parser_prod___AAssertExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4001 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5393);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4001);
   }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5394 */
+  ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4002 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwdo");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5394);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4002);
   }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]);
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4003 */
+  ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4004 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5395 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -30608,495 +21162,189 @@ void parser_prod___AForExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5396 */
+    /* ./parser//parser_prod.nit:4005 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5396);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4005);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5398 */
+  /* ./parser//parser_prod.nit:4007 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4007);
+  }
+  ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:4008 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4008);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4009 */
+  ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:4010 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5399 */
+    /* ./parser//parser_prod.nit:4011 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5399);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4011);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   return;
 }
-void parser_prod___AForExpr___empty_init(val_t p0, int* init_table){
-  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 5281;
-  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;
-  /* ./parser//parser_prod.nit:5281 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos121] = 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 itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AForExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  if (init_table[itpos122]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5283;
-  fra.me.meth = LOCATE_parser_prod___AForExpr___init_aforexpr;
+  fra.me.line = 4015;
+  fra.me.meth = LOCATE_parser_prod___AAssertExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:5292 */
-  CALL_parser_prod___AForExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5293 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5293);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AForExpr____n_kwfor(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5294 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5294);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5295 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5295);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AForExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5296 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5296);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5297 */
+  /* ./parser//parser_prod.nit:4017 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5297);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AForExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5298 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5298);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser_prod, 4017);
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5299 */
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5299);
-    nit_exit(1);
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  ATTR_parser_nodes___AForExpr____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5300 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5300);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:4018 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:4019 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4019);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4020 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:4021 */
+      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:4025 */
+    goto label1;
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5301 */
-  ATTR_parser_nodes___AForExpr____n_block(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5302 */
+  /* ./parser//parser_prod.nit:4027 */
+  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)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+    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[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
       REGB0 = REGB1;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5303 */
+    /* ./parser//parser_prod.nit:4028 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5303);
-      nit_exit(1);
+    } 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;
+      }
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:4029 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4029);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4030 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:4031 */
+      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:4033 */
+      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:4035 */
+    goto label1;
   }
-  /* ./parser//parser_prod.nit:5305 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5306 */
+  /* ./parser//parser_prod.nit:4037 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4037);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  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]));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5307 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5307);
-      nit_exit(1);
-    }
-    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;
-  return;
-}
-void parser_prod___AAssertExpr___n_kwassert__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5404;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_kwassert__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5406 */
-  ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5407 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5409;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5411 */
-  ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5412 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5413 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5413);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5416;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5418 */
-  ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5419 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssertExpr___n_else__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5421;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___n_else__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5423 */
-  ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5424 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5425 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5425);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 5453;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5455 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5455);
-    nit_exit(1);
-  }
-  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]));
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5456 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5457 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5457);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwassert, ID_TKwassert)) /*cast TKwassert*/;
-      /* ./parser//parser_prod.nit:5458 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5458);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:5459 */
-      ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:5461 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5461);
-      nit_exit(1);
-    }
-    /* ./parser//parser_prod.nit:5463 */
-    goto label1;
-  }
-  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]));
-  /* ./parser//parser_prod.nit:5465 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5466 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5467 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5467);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:5468 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5468);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:5469 */
-      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:5471 */
-      ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:5473 */
-    goto label1;
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5475 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5475);
-    nit_exit(1);
-  }
-  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]));
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    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:4038 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5476 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31110,36 +21358,30 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5477 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5477);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4039);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4040 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5478 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5478);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4040);
       }
-      /* ./parser//parser_prod.nit:5479 */
+      /* ./parser//parser_prod.nit:4041 */
       ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5481 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5481);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4043 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4043);
     }
-    /* ./parser//parser_prod.nit:5483 */
+    /* ./parser//parser_prod.nit:4045 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4047 */
   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]));
-  /* ./parser//parser_prod.nit:5485 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -31152,8 +21394,8 @@ void parser_prod___AAssertExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:4048 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5486 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31167,29 +21409,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5487 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5487);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4049);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4050 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5488 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5488);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4050);
       }
-      /* ./parser//parser_prod.nit:5489 */
+      /* ./parser//parser_prod.nit:4051 */
       ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5491 */
+      /* ./parser//parser_prod.nit:4053 */
       ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:5493 */
+    /* ./parser//parser_prod.nit:4055 */
     goto label1;
   }
   label1: while(0);
@@ -31203,7 +21441,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 = 5497;
+  fra.me.line = 4059;
   fra.me.meth = LOCATE_parser_prod___AAssertExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31212,112 +21450,17 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5499 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5499);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5500 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5501 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5501);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5503 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5503);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5504 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:5505 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5505);
-      nit_exit(1);
-    }
-    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___AAssertExpr___visit_all_reverse(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 = 5509;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5511 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwassert");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5511);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwassert", LOCATE_parser_prod, 4061);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5512 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31331,30 +21474,26 @@ void parser_prod___AAssertExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:4063 */
     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*/;
-    /* ./parser//parser_prod.nit:5513 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5513);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4063);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:4065 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5515 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5515);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4065);
   }
   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 */
   fra.me.REG[2] = ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5516 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31368,191 +21507,83 @@ void parser_prod___AAssertExpr___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:4067 */
     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*/;
-    /* ./parser//parser_prod.nit:5517 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5517);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4067);
     }
     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___AAssertExpr___empty_init(val_t p0, int* init_table){
-  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
+void parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
+  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos123]) 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 = 5429;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___empty_init;
+  fra.me.line = 4072;
+  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;
-  /* ./parser//parser_prod.nit:5429 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos123] = 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 itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAssertExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos124]) 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 = 5431;
-  fra.me.meth = LOCATE_parser_prod___AAssertExpr___init_aassertexpr;
+  fra.me.line = 4074;
+  fra.me.meth = LOCATE_parser_prod___AOnceExpr___init_aonceexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:5438 */
-  CALL_parser_prod___AAssertExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4079 */
+  CALL_parser_prod___AOnceExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4080 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5439 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5439);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4080);
   }
-  ATTR_parser_nodes___AAssertExpr____n_kwassert(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4081 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5440 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5440);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4081);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5441 */
-  ATTR_parser_nodes___AAssertExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5442 */
-  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)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5443 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5443);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  }
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5445 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5445);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAssertExpr____n_expr(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5446 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5446);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:5447 */
-  ATTR_parser_nodes___AAssertExpr____n_else(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5448 */
+  /* ./parser//parser_prod.nit:4082 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4082);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4083 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5449 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5449);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4083);
   }
+  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[itpos124] = 1;
-  return;
-}
-void parser_prod___AOnceExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5527;
-  fra.me.meth = LOCATE_parser_prod___AOnceExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5529 */
-  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5530 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOnceExpr___n_kwonce__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5522;
-  fra.me.meth = LOCATE_parser_prod___AOnceExpr___n_kwonce__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5524 */
-  ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5525 */
-  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[itpos132] = 1;
   return;
 }
 void parser_prod___AOnceExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -31562,7 +21593,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 = 5547;
+  fra.me.line = 4086;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31573,13 +21604,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5549 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5549);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser_prod, 4088);
   }
   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]));
@@ -31589,8 +21618,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5550 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31604,40 +21633,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5551 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5551);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4090);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4091 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwonce, ID_TKwonce)) /*cast TKwonce*/;
-      /* ./parser//parser_prod.nit:5552 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5552);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4091);
       }
-      /* ./parser//parser_prod.nit:5553 */
+      /* ./parser//parser_prod.nit:4092 */
       ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5555 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5555);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4094 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4094);
     }
-    /* ./parser//parser_prod.nit:5557 */
+    /* ./parser//parser_prod.nit:4096 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4098 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5559 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5559);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4098);
   }
   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]));
@@ -31647,8 +21668,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5560 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31662,31 +21683,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5561 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5561);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4100);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4101 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5562 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5562);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4101);
       }
-      /* ./parser//parser_prod.nit:5563 */
+      /* ./parser//parser_prod.nit:4102 */
       ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5565 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5565);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4104 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4104);
     }
-    /* ./parser//parser_prod.nit:5567 */
+    /* ./parser//parser_prod.nit:4106 */
     goto label1;
   }
   label1: while(0);
@@ -31699,7 +21714,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 = 5571;
+  fra.me.line = 4110;
   fra.me.meth = LOCATE_parser_prod___AOnceExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -31708,161 +21723,75 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5573 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5573);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5574 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5574);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOnceExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5577;
-  fra.me.meth = LOCATE_parser_prod___AOnceExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5579 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwonce");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5579);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwonce", LOCATE_parser_prod, 4112);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5580 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5580);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4113);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AOnceExpr___empty_init(val_t p0, int* init_table){
-  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
+void parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
+  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos125]) 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 = 5533;
-  fra.me.meth = LOCATE_parser_prod___AOnceExpr___empty_init;
+  fra.me.line = 4117;
+  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;
-  /* ./parser//parser_prod.nit:5533 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos125] = 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 itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOnceExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos126]) 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 = 5535;
-  fra.me.meth = LOCATE_parser_prod___AOnceExpr___init_aonceexpr;
+  fra.me.line = 4119;
+  fra.me.meth = LOCATE_parser_prod___ASendExpr___init_asendexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:5540 */
-  CALL_parser_prod___AOnceExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4123 */
+  CALL_parser_prod___ASendExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4124 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5541 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5541);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4124);
   }
-  ATTR_parser_nodes___AOnceExpr____n_kwonce(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4125 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5542 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5542);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5543 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5543);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5544 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5544);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4125);
   }
-  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[itpos126] = 1;
-  return;
-}
-void parser_prod___ASendExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5584;
-  fra.me.meth = LOCATE_parser_prod___ASendExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5586 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5587 */
   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;
   return;
 }
 void parser_prod___ASendExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -31872,7 +21801,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 = 5601;
+  fra.me.line = 4128;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -31883,13 +21812,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5603 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5603);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4130);
   }
   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]));
@@ -31899,8 +21826,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5604 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -31914,31 +21841,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5605 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5605);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4132);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4133 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5606 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5606);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4133);
       }
-      /* ./parser//parser_prod.nit:5607 */
+      /* ./parser//parser_prod.nit:4134 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5609 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5609);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4136 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4136);
     }
-    /* ./parser//parser_prod.nit:5611 */
+    /* ./parser//parser_prod.nit:4138 */
     goto label1;
   }
   label1: while(0);
@@ -31951,7 +21872,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 = 5615;
+  fra.me.line = 4142;
   fra.me.meth = LOCATE_parser_prod___ASendExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -31959,141 +21880,82 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5617 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5617);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4144);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASendExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
+void parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
+  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 5620;
-  fra.me.meth = LOCATE_parser_prod___ASendExpr___visit_all_reverse;
+  fra.me.line = 4148;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5622 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5622);
-    nit_exit(1);
-  }
-  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]);
   stack_frame_head = fra.me.prev;
+  init_table[itpos135] = 1;
   return;
 }
-void parser_prod___ASendExpr___empty_init(val_t p0, int* init_table){
-  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASendExpr].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos127]) 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 = 5590;
-  fra.me.meth = LOCATE_parser_prod___ASendExpr___empty_init;
+  fra.me.line = 4150;
+  fra.me.meth = LOCATE_parser_prod___ABinopExpr___init_abinopexpr;
   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:5590 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos127] = 1;
-  return;
-}
-void parser_prod___ASendExpr___init_asendexpr(val_t p0, val_t p1, int* init_table){
-  int itpos128 = 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[itpos128]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5592;
-  fra.me.meth = LOCATE_parser_prod___ASendExpr___init_asendexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:5596 */
-  CALL_parser_prod___ASendExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:4155 */
+  CALL_parser_prod___ABinopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4156 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5597 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5597);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4156);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4157 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5598 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5598);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4157);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4158 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4158);
+  }
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4159 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4159);
+  }
+  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[itpos128] = 1;
-  return;
-}
-void parser_prod___ABinopExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5626;
-  fra.me.meth = LOCATE_parser_prod___ABinopExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5628 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5629 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABinopExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5631;
-  fra.me.meth = LOCATE_parser_prod___ABinopExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5633 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5634 */
-  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[itpos136] = 1;
   return;
 }
 void parser_prod___ABinopExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -32103,7 +21965,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 = 5651;
+  fra.me.line = 4162;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32114,13 +21976,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5653 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5653);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4164);
   }
   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]));
@@ -32130,8 +21990,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5654 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32145,40 +22005,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5655 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5655);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4166);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4167 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5656 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5656);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4167);
       }
-      /* ./parser//parser_prod.nit:5657 */
+      /* ./parser//parser_prod.nit:4168 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5659 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5659);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4170 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4170);
     }
-    /* ./parser//parser_prod.nit:5661 */
+    /* ./parser//parser_prod.nit:4172 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4174 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5663 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5663);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4174);
   }
   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]));
@@ -32188,8 +22040,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5664 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32203,31 +22055,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5665 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5665);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4176);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4177 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5666 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5666);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4177);
       }
-      /* ./parser//parser_prod.nit:5667 */
+      /* ./parser//parser_prod.nit:4178 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5669 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5669);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4180 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4180);
     }
-    /* ./parser//parser_prod.nit:5671 */
+    /* ./parser//parser_prod.nit:4182 */
     goto label1;
   }
   label1: while(0);
@@ -32240,7 +22086,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 = 5675;
+  fra.me.line = 4186;
   fra.me.meth = LOCATE_parser_prod___ABinopExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32249,95 +22095,52 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5677 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5677);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5678 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5678);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABinopExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5681;
-  fra.me.meth = LOCATE_parser_prod___ABinopExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5683 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5683);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4188);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5684 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5684);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4189);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABinopExpr___empty_init(val_t p0, int* init_table){
-  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+void parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
+  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos129]) 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 = 5637;
-  fra.me.meth = LOCATE_parser_prod___ABinopExpr___empty_init;
+  fra.me.line = 4193;
+  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;
-  /* ./parser//parser_prod.nit:5637 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos129] = 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 itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABinopExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos130]) 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 = 5639;
-  fra.me.meth = LOCATE_parser_prod___ABinopExpr___init_abinopexpr;
+  fra.me.line = 4195;
+  fra.me.meth = LOCATE_parser_prod___AOrExpr___init_aorexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -32346,84 +22149,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:5644 */
-  CALL_parser_prod___ABinopExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4200 */
+  CALL_parser_prod___AOrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4201 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5645 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5645);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4201);
   }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4202 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5646 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5646);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4202);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4203 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5647 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5647);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4203);
   }
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4204 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5648 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5648);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4204);
   }
   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[itpos130] = 1;
-  return;
-}
-void parser_prod___AOrExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5688;
-  fra.me.meth = LOCATE_parser_prod___AOrExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5690 */
-  ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5691 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOrExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5693;
-  fra.me.meth = LOCATE_parser_prod___AOrExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5695 */
-  ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5696 */
-  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[itpos138] = 1;
   return;
 }
 void parser_prod___AOrExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -32433,7 +22188,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 = 5713;
+  fra.me.line = 4207;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32444,13 +22199,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5715 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5715);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4209);
   }
   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]));
@@ -32460,8 +22213,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5716 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32475,40 +22228,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5717 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5717);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4211);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4212 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5718 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5718);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4212);
       }
-      /* ./parser//parser_prod.nit:5719 */
+      /* ./parser//parser_prod.nit:4213 */
       ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5721 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5721);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4215 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4215);
     }
-    /* ./parser//parser_prod.nit:5723 */
+    /* ./parser//parser_prod.nit:4217 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4219 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5725 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5725);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4219);
   }
   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]));
@@ -32518,8 +22263,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5726 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32533,31 +22278,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5727 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5727);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4221);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4222 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5728 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5728);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4222);
       }
-      /* ./parser//parser_prod.nit:5729 */
+      /* ./parser//parser_prod.nit:4223 */
       ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5731 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5731);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4225 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4225);
     }
-    /* ./parser//parser_prod.nit:5733 */
+    /* ./parser//parser_prod.nit:4227 */
     goto label1;
   }
   label1: while(0);
@@ -32570,7 +22309,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 = 5737;
+  fra.me.line = 4231;
   fra.me.meth = LOCATE_parser_prod___AOrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32579,95 +22318,52 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5739 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5739);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5740 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5740);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOrExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5743;
-  fra.me.meth = LOCATE_parser_prod___AOrExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5745 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5745);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4233);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5746 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5746);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4234);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AOrExpr___empty_init(val_t p0, int* init_table){
-  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+void parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
+  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos131]) 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 = 5699;
-  fra.me.meth = LOCATE_parser_prod___AOrExpr___empty_init;
+  fra.me.line = 4238;
+  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;
-  /* ./parser//parser_prod.nit:5699 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos131] = 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 itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrExpr].i;
+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;
   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[itpos140]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5701;
-  fra.me.meth = LOCATE_parser_prod___AOrExpr___init_aorexpr;
+  fra.me.line = 4240;
+  fra.me.meth = LOCATE_parser_prod___AAndExpr___init_aandexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -32676,84 +22372,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:5706 */
-  CALL_parser_prod___AOrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4245 */
+  CALL_parser_prod___AAndExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4246 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5707 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5707);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4246);
   }
-  ATTR_parser_nodes___AOrExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4247 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5708 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5708);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4247);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4248 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5709 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5709);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4248);
   }
-  ATTR_parser_nodes___AOrExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4249 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5710 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5710);
-    nit_exit(1);
+    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]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos132] = 1;
-  return;
-}
-void parser_prod___AAndExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5750;
-  fra.me.meth = LOCATE_parser_prod___AAndExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5752 */
-  ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5753 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAndExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5755;
-  fra.me.meth = LOCATE_parser_prod___AAndExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5757 */
-  ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5758 */
-  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[itpos140] = 1;
   return;
 }
 void parser_prod___AAndExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -32763,7 +22411,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 = 5775;
+  fra.me.line = 4252;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -32774,13 +22422,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5777 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5777);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4254);
   }
   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]));
@@ -32790,8 +22436,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5778 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32805,40 +22451,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5779 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5779);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4256);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4257 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5780 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5780);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4257);
       }
-      /* ./parser//parser_prod.nit:5781 */
+      /* ./parser//parser_prod.nit:4258 */
       ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5783 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5783);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4260 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4260);
     }
-    /* ./parser//parser_prod.nit:5785 */
+    /* ./parser//parser_prod.nit:4262 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4264 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5787 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5787);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4264);
   }
   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]));
@@ -32848,8 +22486,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5788 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -32863,31 +22501,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5789 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5789);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4266);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4267 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5790 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5790);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4267);
       }
-      /* ./parser//parser_prod.nit:5791 */
+      /* ./parser//parser_prod.nit:4268 */
       ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5793 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5793);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4270 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4270);
     }
-    /* ./parser//parser_prod.nit:5795 */
+    /* ./parser//parser_prod.nit:4272 */
     goto label1;
   }
   label1: while(0);
@@ -32900,7 +22532,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 = 5799;
+  fra.me.line = 4276;
   fra.me.meth = LOCATE_parser_prod___AAndExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -32909,95 +22541,52 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5801 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5801);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5802 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5802);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAndExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5805;
-  fra.me.meth = LOCATE_parser_prod___AAndExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5807 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5807);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4278);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5808 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5808);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4279);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAndExpr___empty_init(val_t p0, int* init_table){
-  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+void parser_prod___AOrElseExpr___empty_init(val_t p0, int* init_table){
+  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrElseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos133]) 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 = 5761;
-  fra.me.meth = LOCATE_parser_prod___AAndExpr___empty_init;
+  fra.me.line = 4283;
+  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;
-  /* ./parser//parser_prod.nit:5761 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos133] = 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 itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAndExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos134]) 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 = 5763;
-  fra.me.meth = LOCATE_parser_prod___AAndExpr___init_aandexpr;
+  fra.me.line = 4285;
+  fra.me.meth = LOCATE_parser_prod___AOrElseExpr___init_aorelseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -33006,95 +22595,47 @@ 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:5768 */
-  CALL_parser_prod___AAndExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4290 */
+  CALL_parser_prod___AOrElseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4291 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5769 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5769);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4291);
   }
-  ATTR_parser_nodes___AAndExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4292 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5770 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5770);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4292);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4293 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5771 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5771);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4293);
   }
-  ATTR_parser_nodes___AAndExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4294 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5772 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5772);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4294);
   }
   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[itpos134] = 1;
-  return;
-}
-void parser_prod___ANotExpr___n_kwnot__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5812;
-  fra.me.meth = LOCATE_parser_prod___ANotExpr___n_kwnot__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5814 */
-  ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5815 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANotExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5817;
-  fra.me.meth = LOCATE_parser_prod___ANotExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5819 */
-  ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5820 */
-  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[itpos142] = 1;
   return;
 }
-void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AOrElseExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 5837;
-  fra.me.meth = LOCATE_parser_prod___ANotExpr___replace_child;
+  fra.me.line = 4297;
+  fra.me.meth = LOCATE_parser_prod___AOrElseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -33104,15 +22645,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5839 */
+  /* ./parser//parser_prod.nit:4299 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5839);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4299);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33120,8 +22659,8 @@ 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:4300 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5840 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33135,42 +22674,34 @@ 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:4301 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5841 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5841);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4301);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
-      /* ./parser//parser_prod.nit:5842 */
+      /* ./parser//parser_prod.nit:4302 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5842);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4302);
       }
-      /* ./parser//parser_prod.nit:5843 */
-      ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4303 */
+      ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5845 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5845);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4305 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4305);
     }
-    /* ./parser//parser_prod.nit:5847 */
+    /* ./parser//parser_prod.nit:4307 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5849 */
+  /* ./parser//parser_prod.nit:4309 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5849);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4309);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33178,8 +22709,8 @@ 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:4310 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5850 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33193,83 +22724,39 @@ 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:4311 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5851 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5851);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4311);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4312 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5852 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5852);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4312);
       }
-      /* ./parser//parser_prod.nit:5853 */
-      ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4313 */
+      ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5855 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5855);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4315 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4315);
     }
-    /* ./parser//parser_prod.nit:5857 */
+    /* ./parser//parser_prod.nit:4317 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5861;
-  fra.me.meth = LOCATE_parser_prod___ANotExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5863 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5863);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5864 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5864);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANotExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AOrElseExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5867;
-  fra.me.meth = LOCATE_parser_prod___ANotExpr___visit_all_reverse;
+  fra.me.line = 4321;
+  fra.me.meth = LOCATE_parser_prod___AOrElseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -33277,56 +22764,51 @@ void parser_prod___ANotExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5869 */
+  /* ./parser//parser_prod.nit:4323 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrElseExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5869);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4323);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5870 */
+  /* ./parser//parser_prod.nit:4324 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AOrElseExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5870);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4324);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser_prod___ANotExpr___empty_init(val_t p0, int* init_table){
-  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos135]) 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 = 5823;
+  fra.me.line = 4328;
   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;
-  /* ./parser//parser_prod.nit:5823 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos135] = 1;
+  init_table[itpos143] = 1;
   return;
 }
 void parser_prod___ANotExpr___init_anotexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANotExpr].i;
+  int itpos144 = 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[itpos136]) 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 = 5825;
+  fra.me.line = 4330;
   fra.me.meth = LOCATE_parser_prod___ANotExpr___init_anotexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33336,95 +22818,47 @@ 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:5830 */
+  /* ./parser//parser_prod.nit:4335 */
   CALL_parser_prod___ANotExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4336 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5831 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5831);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4336);
   }
   ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4337 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5832 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5832);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4337);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4338 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5833 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5833);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4338);
   }
   ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4339 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5834 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5834);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4339);
   }
   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;
-  return;
-}
-void parser_prod___AEqExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5874;
-  fra.me.meth = LOCATE_parser_prod___AEqExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5876 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5877 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEqExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5879;
-  fra.me.meth = LOCATE_parser_prod___AEqExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5881 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5882 */
-  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[itpos144] = 1;
   return;
 }
-void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ANotExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 5899;
-  fra.me.meth = LOCATE_parser_prod___AEqExpr___replace_child;
+  fra.me.line = 4342;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -33434,15 +22868,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5901 */
+  /* ./parser//parser_prod.nit:4344 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5901);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 4344);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33450,8 +22882,8 @@ 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:4345 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5902 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33465,42 +22897,34 @@ 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:4346 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5903 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5903);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4346);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:5904 */
+      /* ./parser//parser_prod.nit:4347 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5904);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4347);
       }
-      /* ./parser//parser_prod.nit:5905 */
-      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4348 */
+      ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5907 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5907);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4350 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4350);
     }
-    /* ./parser//parser_prod.nit:5909 */
+    /* ./parser//parser_prod.nit:4352 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5911 */
+  /* ./parser//parser_prod.nit:4354 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5911);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4354);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33508,8 +22932,8 @@ 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:4355 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5912 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33523,83 +22947,39 @@ 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:4356 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5913 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5913);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4356);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4357 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5914 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5914);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4357);
       }
-      /* ./parser//parser_prod.nit:5915 */
-      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4358 */
+      ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5917 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5917);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4360 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4360);
     }
-    /* ./parser//parser_prod.nit:5919 */
+    /* ./parser//parser_prod.nit:4362 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5923;
-  fra.me.meth = LOCATE_parser_prod___AEqExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5925 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5925);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5926 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5926);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEqExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ANotExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5929;
-  fra.me.meth = LOCATE_parser_prod___AEqExpr___visit_all_reverse;
+  fra.me.line = 4366;
+  fra.me.meth = LOCATE_parser_prod___ANotExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -33607,56 +22987,51 @@ void parser_prod___AEqExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5931 */
+  /* ./parser//parser_prod.nit:4368 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5931);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 4368);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5932 */
+  /* ./parser//parser_prod.nit:4369 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANotExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5932);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4369);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser_prod___AEqExpr___empty_init(val_t p0, int* init_table){
-  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos137]) 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 = 5885;
+  fra.me.line = 4373;
   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;
-  /* ./parser//parser_prod.nit:5885 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos137] = 1;
+  init_table[itpos145] = 1;
   return;
 }
 void parser_prod___AEqExpr___init_aeqexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEqExpr].i;
+  int itpos146 = 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[itpos138]) 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 = 5887;
+  fra.me.line = 4375;
   fra.me.meth = LOCATE_parser_prod___AEqExpr___init_aeqexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33666,113 +23041,63 @@ 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:5892 */
+  /* ./parser//parser_prod.nit:4380 */
   CALL_parser_prod___AEqExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4381 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5893 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5893);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4381);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4382 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5894 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5894);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4382);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4383 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5895 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5895);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4383);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4384 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5896 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5896);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4384);
   }
   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[itpos146] = 1;
   return;
 }
-void parser_prod___AEeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AEqExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 5936;
-  fra.me.meth = LOCATE_parser_prod___AEeExpr___n_expr__eq;
+  fra.me.line = 4387;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5938 */
-  ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5939 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5941;
-  fra.me.meth = LOCATE_parser_prod___AEeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:5943 */
-  ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:5944 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 5961;
-  fra.me.meth = LOCATE_parser_prod___AEeExpr___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[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5963 */
+  /* ./parser//parser_prod.nit:4389 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5963);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4389);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33780,8 +23105,8 @@ 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:4390 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5964 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33795,42 +23120,34 @@ 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:4391 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5965 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5965);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4391);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4392 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5966 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5966);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4392);
       }
-      /* ./parser//parser_prod.nit:5967 */
-      ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4393 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5969 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5969);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4395 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4395);
     }
-    /* ./parser//parser_prod.nit:5971 */
+    /* ./parser//parser_prod.nit:4397 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5973 */
+  /* ./parser//parser_prod.nit:4399 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5973);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4399);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -33838,8 +23155,8 @@ 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:4400 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:5974 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -33853,83 +23170,39 @@ 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:4401 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:5975 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5975);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4401);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4402 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:5976 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5976);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4402);
       }
-      /* ./parser//parser_prod.nit:5977 */
-      ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4403 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:5979 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5979);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4405 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4405);
     }
-    /* ./parser//parser_prod.nit:5981 */
+    /* ./parser//parser_prod.nit:4407 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5985;
-  fra.me.meth = LOCATE_parser_prod___AEeExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5987 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5987);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5988 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5988);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEeExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AEqExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5991;
-  fra.me.meth = LOCATE_parser_prod___AEeExpr___visit_all_reverse;
+  fra.me.line = 4411;
+  fra.me.meth = LOCATE_parser_prod___AEqExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -33937,56 +23210,51 @@ void parser_prod___AEeExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5993 */
+  /* ./parser//parser_prod.nit:4413 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5993);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4413);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5994 */
+  /* ./parser//parser_prod.nit:4414 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5994);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4414);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser_prod___AEeExpr___empty_init(val_t p0, int* init_table){
-  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos139]) 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 = 5947;
+  fra.me.line = 4418;
   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;
-  /* ./parser//parser_prod.nit:5947 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos139] = 1;
+  init_table[itpos147] = 1;
   return;
 }
 void parser_prod___AEeExpr___init_aeeexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEeExpr].i;
+  int itpos148 = 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[itpos140]) 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 = 5949;
+  fra.me.line = 4420;
   fra.me.meth = LOCATE_parser_prod___AEeExpr___init_aeeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -33996,95 +23264,47 @@ 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:5954 */
+  /* ./parser//parser_prod.nit:4425 */
   CALL_parser_prod___AEeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4426 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5955 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5955);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4426);
   }
   ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4427 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5956 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5956);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4427);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4428 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:5957 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5957);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4428);
   }
   ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4429 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:5958 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 5958);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4429);
   }
   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;
-  return;
-}
-void parser_prod___ANeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 5998;
-  fra.me.meth = LOCATE_parser_prod___ANeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6000 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6001 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6003;
-  fra.me.meth = LOCATE_parser_prod___ANeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6005 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6006 */
-  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[itpos148] = 1;
   return;
 }
-void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AEeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6023;
-  fra.me.meth = LOCATE_parser_prod___ANeExpr___replace_child;
+  fra.me.line = 4432;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34094,15 +23314,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6025 */
+  /* ./parser//parser_prod.nit:4434 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6025);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4434);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -34110,8 +23328,8 @@ 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:4435 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6026 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34125,42 +23343,34 @@ 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:4436 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6027 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6027);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4436);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4437 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6028 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6028);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4437);
       }
-      /* ./parser//parser_prod.nit:6029 */
-      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4438 */
+      ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6031 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6031);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4440 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4440);
     }
-    /* ./parser//parser_prod.nit:6033 */
+    /* ./parser//parser_prod.nit:4442 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6035 */
+  /* ./parser//parser_prod.nit:4444 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6035);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4444);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -34168,8 +23378,8 @@ 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:4445 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6036 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34183,83 +23393,39 @@ 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:4446 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6037 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6037);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4446);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4447 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6038 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6038);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4447);
       }
-      /* ./parser//parser_prod.nit:6039 */
-      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4448 */
+      ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6041 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6041);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4450 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4450);
     }
-    /* ./parser//parser_prod.nit:6043 */
+    /* ./parser//parser_prod.nit:4452 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6047;
-  fra.me.meth = LOCATE_parser_prod___ANeExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6049 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6049);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6050);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANeExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AEeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6053;
-  fra.me.meth = LOCATE_parser_prod___ANeExpr___visit_all_reverse;
+  fra.me.line = 4456;
+  fra.me.meth = LOCATE_parser_prod___AEeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -34267,56 +23433,51 @@ void parser_prod___ANeExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6055 */
+  /* ./parser//parser_prod.nit:4458 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6055);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4458);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6056 */
+  /* ./parser//parser_prod.nit:4459 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AEeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6056);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4459);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser_prod___ANeExpr___empty_init(val_t p0, int* init_table){
-  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos141]) 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 = 6009;
+  fra.me.line = 4463;
   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;
-  /* ./parser//parser_prod.nit:6009 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos141] = 1;
+  init_table[itpos149] = 1;
   return;
 }
 void parser_prod___ANeExpr___init_aneexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANeExpr].i;
+  int itpos150 = 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[itpos142]) 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 = 6011;
+  fra.me.line = 4465;
   fra.me.meth = LOCATE_parser_prod___ANeExpr___init_aneexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34326,95 +23487,47 @@ 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:6016 */
+  /* ./parser//parser_prod.nit:4470 */
   CALL_parser_prod___ANeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4471 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6017 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6017);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4471);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4472 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6018 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6018);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4472);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4473 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6019 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6019);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4473);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4474 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6020 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6020);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4474);
   }
   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;
-  return;
-}
-void parser_prod___ALtExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6060;
-  fra.me.meth = LOCATE_parser_prod___ALtExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6062 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6063 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALtExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6065;
-  fra.me.meth = LOCATE_parser_prod___ALtExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6067 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6068 */
-  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[itpos150] = 1;
   return;
 }
-void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ANeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6085;
-  fra.me.meth = LOCATE_parser_prod___ALtExpr___replace_child;
+  fra.me.line = 4477;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34424,13 +23537,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:4479 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6087 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6087);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4479);
   }
   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]));
@@ -34440,8 +23551,8 @@ 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:4480 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6088 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34455,40 +23566,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:4481 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6089 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6089);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4481);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4482 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6090 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6090);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4482);
       }
-      /* ./parser//parser_prod.nit:6091 */
+      /* ./parser//parser_prod.nit:4483 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6093 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6093);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4485 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4485);
     }
-    /* ./parser//parser_prod.nit:6095 */
+    /* ./parser//parser_prod.nit:4487 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4489 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6097 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6097);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4489);
   }
   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]));
@@ -34498,8 +23601,8 @@ 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:4490 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6098 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34513,83 +23616,39 @@ 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:4491 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6099 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6099);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4491);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4492 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6100 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6100);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4492);
       }
-      /* ./parser//parser_prod.nit:6101 */
+      /* ./parser//parser_prod.nit:4493 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6103 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6103);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4495 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4495);
     }
-    /* ./parser//parser_prod.nit:6105 */
+    /* ./parser//parser_prod.nit:4497 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6109;
-  fra.me.meth = LOCATE_parser_prod___ALtExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6111 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6111);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6112 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6112);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALtExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ANeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6115;
-  fra.me.meth = LOCATE_parser_prod___ALtExpr___visit_all_reverse;
+  fra.me.line = 4501;
+  fra.me.meth = LOCATE_parser_prod___ANeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -34597,23 +23656,19 @@ void parser_prod___ALtExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6117 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6117);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4503);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6118 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6118);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4504);
   }
   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]);
@@ -34621,32 +23676,31 @@ void parser_prod___ALtExpr___visit_all_reverse(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALtExpr___empty_init(val_t p0, int* init_table){
-  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos143]) 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 = 6071;
+  fra.me.line = 4508;
   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;
-  /* ./parser//parser_prod.nit:6071 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos143] = 1;
+  init_table[itpos151] = 1;
   return;
 }
 void parser_prod___ALtExpr___init_altexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALtExpr].i;
+  int itpos152 = 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[itpos144]) 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 = 6073;
+  fra.me.line = 4510;
   fra.me.meth = LOCATE_parser_prod___ALtExpr___init_altexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34656,95 +23710,47 @@ 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:6078 */
+  /* ./parser//parser_prod.nit:4515 */
   CALL_parser_prod___ALtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4516 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6079 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6079);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4516);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4517 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6080 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6080);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4517);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4518 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6081 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6081);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4518);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4519 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6082 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6082);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4519);
   }
   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;
-  return;
-}
-void parser_prod___ALeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6122;
-  fra.me.meth = LOCATE_parser_prod___ALeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6124 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6125 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6127;
-  fra.me.meth = LOCATE_parser_prod___ALeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6129 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6130 */
-  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[itpos152] = 1;
   return;
 }
-void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ALtExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6147;
-  fra.me.meth = LOCATE_parser_prod___ALeExpr___replace_child;
+  fra.me.line = 4522;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -34754,13 +23760,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:4524 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6149 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6149);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4524);
   }
   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]));
@@ -34770,8 +23774,8 @@ 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:4525 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6150 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34785,40 +23789,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:4526 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6151 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6151);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4526);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4527 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6152 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6152);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4527);
       }
-      /* ./parser//parser_prod.nit:6153 */
+      /* ./parser//parser_prod.nit:4528 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6155 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6155);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4530 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4530);
     }
-    /* ./parser//parser_prod.nit:6157 */
+    /* ./parser//parser_prod.nit:4532 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4534 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6159 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6159);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4534);
   }
   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]));
@@ -34828,8 +23824,8 @@ 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:4535 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6160 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -34843,83 +23839,39 @@ 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:4536 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6161 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6161);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4536);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4537 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6162 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6162);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4537);
       }
-      /* ./parser//parser_prod.nit:6163 */
+      /* ./parser//parser_prod.nit:4538 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6165 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6165);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4540 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4540);
     }
-    /* ./parser//parser_prod.nit:6167 */
+    /* ./parser//parser_prod.nit:4542 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6171;
-  fra.me.meth = LOCATE_parser_prod___ALeExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6173);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6174);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ALeExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ALtExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6177;
-  fra.me.meth = LOCATE_parser_prod___ALeExpr___visit_all_reverse;
+  fra.me.line = 4546;
+  fra.me.meth = LOCATE_parser_prod___ALtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -34927,23 +23879,19 @@ void parser_prod___ALeExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6179 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6179);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4548);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6180 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6180);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4549);
   }
   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]);
@@ -34951,32 +23899,31 @@ void parser_prod___ALeExpr___visit_all_reverse(val_t p0, val_t p1){
   return;
 }
 void parser_prod___ALeExpr___empty_init(val_t p0, int* init_table){
-  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos145]) 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 = 6133;
+  fra.me.line = 4553;
   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;
-  /* ./parser//parser_prod.nit:6133 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos145] = 1;
+  init_table[itpos153] = 1;
   return;
 }
 void parser_prod___ALeExpr___init_aleexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALeExpr].i;
+  int itpos154 = 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[itpos146]) 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 = 6135;
+  fra.me.line = 4555;
   fra.me.meth = LOCATE_parser_prod___ALeExpr___init_aleexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -34986,95 +23933,47 @@ 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:6140 */
+  /* ./parser//parser_prod.nit:4560 */
   CALL_parser_prod___ALeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4561 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6141 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6141);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4561);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4562 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6142 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6142);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4562);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4563 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6143 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6143);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4563);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4564 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6144 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6144);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4564);
   }
   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;
-  return;
-}
-void parser_prod___AGtExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6184;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6186 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6187 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AGtExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6189;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6191 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6192 */
-  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[itpos154] = 1;
   return;
 }
-void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ALeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6209;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___replace_child;
+  fra.me.line = 4567;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -35084,13 +23983,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:4569 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6211 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6211);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4569);
   }
   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]));
@@ -35100,8 +23997,8 @@ 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:4570 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6212 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35115,40 +24012,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:4571 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6213 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6213);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4571);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4572 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6214 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6214);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4572);
       }
-      /* ./parser//parser_prod.nit:6215 */
+      /* ./parser//parser_prod.nit:4573 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6217 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6217);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4575 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4575);
     }
-    /* ./parser//parser_prod.nit:6219 */
+    /* ./parser//parser_prod.nit:4577 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4579 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6221 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6221);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4579);
   }
   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]));
@@ -35158,8 +24047,8 @@ 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:4580 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6222 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35173,83 +24062,39 @@ 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:4581 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6223 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6223);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4581);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4582 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6224 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6224);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4582);
       }
-      /* ./parser//parser_prod.nit:6225 */
+      /* ./parser//parser_prod.nit:4583 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6227 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6227);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4585 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4585);
     }
-    /* ./parser//parser_prod.nit:6229 */
+    /* ./parser//parser_prod.nit:4587 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6233;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6235 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6235);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6236 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6236);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AGtExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ALeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6239;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___visit_all_reverse;
+  fra.me.line = 4591;
+  fra.me.meth = LOCATE_parser_prod___ALeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35257,57 +24102,52 @@ void parser_prod___AGtExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6241 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6241);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4593);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6242 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6242);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4594);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
-  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+void parser_prod___ALlExpr___empty_init(val_t p0, int* init_table){
+  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALlExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos147]) 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 = 6195;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___empty_init;
+  fra.me.line = 4598;
+  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;
-  /* ./parser//parser_prod.nit:6195 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos147] = 1;
+  init_table[itpos155] = 1;
   return;
 }
-void parser_prod___AGtExpr___init_agtexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
+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;
   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[itpos156]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6197;
-  fra.me.meth = LOCATE_parser_prod___AGtExpr___init_agtexpr;
+  fra.me.line = 4600;
+  fra.me.meth = LOCATE_parser_prod___ALlExpr___init_allexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35316,95 +24156,47 @@ 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:6202 */
-  CALL_parser_prod___AGtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4605 */
+  CALL_parser_prod___ALlExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4606 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6203 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6203);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4606);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4607 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6204 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6204);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4607);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4608 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6205 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6205);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4608);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4609 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6206 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6206);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4609);
   }
   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;
-  return;
-}
-void parser_prod___AGeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6246;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6248 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6249 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AGeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6251;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6253 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6254 */
-  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[itpos156] = 1;
   return;
 }
-void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ALlExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6271;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___replace_child;
+  fra.me.line = 4612;
+  fra.me.meth = LOCATE_parser_prod___ALlExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -35414,13 +24206,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:4614 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6273 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6273);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4614);
   }
   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]));
@@ -35430,8 +24220,8 @@ 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:4615 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6274 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35445,40 +24235,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:4616 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6275 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6275);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4616);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4617 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6276 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6276);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4617);
       }
-      /* ./parser//parser_prod.nit:6277 */
+      /* ./parser//parser_prod.nit:4618 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6279 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6279);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4620 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4620);
     }
-    /* ./parser//parser_prod.nit:6281 */
+    /* ./parser//parser_prod.nit:4622 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4624 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6283 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6283);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4624);
   }
   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]));
@@ -35488,8 +24270,8 @@ 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:4625 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6284 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35503,83 +24285,39 @@ 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:4626 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6285 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6285);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4626);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4627 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6286 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6286);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4627);
       }
-      /* ./parser//parser_prod.nit:6287 */
+      /* ./parser//parser_prod.nit:4628 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6289 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6289);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4630 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4630);
     }
-    /* ./parser//parser_prod.nit:6291 */
+    /* ./parser//parser_prod.nit:4632 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6295;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6297 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6297);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6298 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6298);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AGeExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ALlExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6301;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___visit_all_reverse;
+  fra.me.line = 4636;
+  fra.me.meth = LOCATE_parser_prod___ALlExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35587,57 +24325,52 @@ void parser_prod___AGeExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6303 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6303);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4638);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6304 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6304);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4639);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
-  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+void parser_prod___AGtExpr___empty_init(val_t p0, int* init_table){
+  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGtExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos149]) 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 = 6257;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___empty_init;
+  fra.me.line = 4643;
+  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;
-  /* ./parser//parser_prod.nit:6257 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos149] = 1;
+  init_table[itpos157] = 1;
   return;
 }
-void parser_prod___AGeExpr___init_ageexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
+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;
   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[itpos158]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6259;
-  fra.me.meth = LOCATE_parser_prod___AGeExpr___init_ageexpr;
+  fra.me.line = 4645;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___init_agtexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35646,95 +24379,47 @@ 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:6264 */
-  CALL_parser_prod___AGeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4650 */
+  CALL_parser_prod___AGtExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4651 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6265 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6265);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4651);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4652 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6266 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6266);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4652);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4653 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6267 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6267);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4653);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4654 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6268 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6268);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4654);
   }
   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;
-  return;
-}
-void parser_prod___AIsaExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6308;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6310 */
-  ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6311 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIsaExpr___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6313;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6315 */
-  ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6316 */
-  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[itpos158] = 1;
   return;
 }
-void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AGtExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6333;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___replace_child;
+  fra.me.line = 4657;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -35744,15 +24429,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6335 */
+  /* ./parser//parser_prod.nit:4659 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6335);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4659);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35760,8 +24443,8 @@ 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:4660 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6336 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35775,42 +24458,34 @@ 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:4661 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6337 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6337);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4661);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4662 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6338 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6338);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4662);
       }
-      /* ./parser//parser_prod.nit:6339 */
-      ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4663 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6341 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6341);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4665 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4665);
     }
-    /* ./parser//parser_prod.nit:6343 */
+    /* ./parser//parser_prod.nit:4667 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6345 */
+  /* ./parser//parser_prod.nit:4669 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6345);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4669);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -35818,8 +24493,8 @@ 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:4670 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6346 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -35833,83 +24508,39 @@ 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:4671 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6347 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6347);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4671);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:6348 */
+      /* ./parser//parser_prod.nit:4672 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6348);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4672);
       }
-      /* ./parser//parser_prod.nit:6349 */
-      ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4673 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6351 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6351);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4675 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4675);
     }
-    /* ./parser//parser_prod.nit:6353 */
+    /* ./parser//parser_prod.nit:4677 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6357;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6359);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6360 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6360);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIsaExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AGtExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6363;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___visit_all_reverse;
+  fra.me.line = 4681;
+  fra.me.meth = LOCATE_parser_prod___AGtExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35917,57 +24548,52 @@ void parser_prod___AIsaExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6365 */
+  /* ./parser//parser_prod.nit:4683 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6365);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4683);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6366 */
+  /* ./parser//parser_prod.nit:4684 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6366);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4684);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
-  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+void parser_prod___AGeExpr___empty_init(val_t p0, int* init_table){
+  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos151]) 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 = 6319;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___empty_init;
+  fra.me.line = 4688;
+  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;
-  /* ./parser//parser_prod.nit:6319 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos151] = 1;
+  init_table[itpos159] = 1;
   return;
 }
-void parser_prod___AIsaExpr___init_aisaexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
+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;
   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[itpos160]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6321;
-  fra.me.meth = LOCATE_parser_prod___AIsaExpr___init_aisaexpr;
+  fra.me.line = 4690;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___init_ageexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -35976,95 +24602,47 @@ 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:6326 */
-  CALL_parser_prod___AIsaExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4695 */
+  CALL_parser_prod___AGeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4696 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6327 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6327);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4696);
   }
-  ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4697 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6328 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6328);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4697);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4698 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6329 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6329);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4698);
   }
-  ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4699 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6330 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6330);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4699);
   }
   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;
-  return;
-}
-void parser_prod___APlusExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6370;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6372 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6373 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APlusExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6375;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6377 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6378 */
-  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[itpos160] = 1;
   return;
 }
-void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AGeExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6395;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___replace_child;
+  fra.me.line = 4702;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36074,13 +24652,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:4704 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6397 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6397);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4704);
   }
   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]));
@@ -36090,8 +24666,8 @@ 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:4705 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6398 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36105,40 +24681,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:4706 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6399 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6399);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4706);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4707 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6400 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6400);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4707);
       }
-      /* ./parser//parser_prod.nit:6401 */
+      /* ./parser//parser_prod.nit:4708 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6403 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6403);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4710 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4710);
     }
-    /* ./parser//parser_prod.nit:6405 */
+    /* ./parser//parser_prod.nit:4712 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4714 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6407 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6407);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4714);
   }
   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]));
@@ -36148,8 +24716,8 @@ 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:4715 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6408 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36163,83 +24731,39 @@ 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:4716 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6409 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6409);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4716);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4717 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6410 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6410);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4717);
       }
-      /* ./parser//parser_prod.nit:6411 */
+      /* ./parser//parser_prod.nit:4718 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6413 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6413);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4720 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4720);
     }
-    /* ./parser//parser_prod.nit:6415 */
+    /* ./parser//parser_prod.nit:4722 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6419;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6421 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6421);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6422 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6422);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APlusExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AGeExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6425;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___visit_all_reverse;
+  fra.me.line = 4726;
+  fra.me.meth = LOCATE_parser_prod___AGeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36247,57 +24771,52 @@ void parser_prod___APlusExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6427 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6427);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4728);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6428 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6428);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4729);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
-  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+void parser_prod___AGgExpr___empty_init(val_t p0, int* init_table){
+  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AGgExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos153]) 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 = 6381;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___empty_init;
+  fra.me.line = 4733;
+  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;
-  /* ./parser//parser_prod.nit:6381 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos153] = 1;
+  init_table[itpos161] = 1;
   return;
 }
-void parser_prod___APlusExpr___init_aplusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
+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;
   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[itpos162]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6383;
-  fra.me.meth = LOCATE_parser_prod___APlusExpr___init_aplusexpr;
+  fra.me.line = 4735;
+  fra.me.meth = LOCATE_parser_prod___AGgExpr___init_aggexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36306,95 +24825,47 @@ 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:6388 */
-  CALL_parser_prod___APlusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4740 */
+  CALL_parser_prod___AGgExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4741 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6389 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6389);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4741);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4742 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6390 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6390);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4742);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4743 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6391 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6391);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4743);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4744 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6392 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6392);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4744);
   }
   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;
-  return;
-}
-void parser_prod___AMinusExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6432;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6434 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6435 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMinusExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6437;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6439 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6440 */
-  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[itpos162] = 1;
   return;
 }
-void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AGgExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6457;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___replace_child;
+  fra.me.line = 4747;
+  fra.me.meth = LOCATE_parser_prod___AGgExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36404,13 +24875,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:4749 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6459 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6459);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4749);
   }
   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]));
@@ -36420,8 +24889,8 @@ 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:4750 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6460 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36435,40 +24904,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:4751 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6461 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6461);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4751);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4752 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6462 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6462);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4752);
       }
-      /* ./parser//parser_prod.nit:6463 */
+      /* ./parser//parser_prod.nit:4753 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6465 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6465);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4755 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4755);
     }
-    /* ./parser//parser_prod.nit:6467 */
+    /* ./parser//parser_prod.nit:4757 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4759 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6469 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6469);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4759);
   }
   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]));
@@ -36478,8 +24939,8 @@ 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:4760 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6470 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36493,83 +24954,39 @@ 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:4761 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6471 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6471);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4761);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4762 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6472 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6472);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4762);
       }
-      /* ./parser//parser_prod.nit:6473 */
+      /* ./parser//parser_prod.nit:4763 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6475 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6475);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4765 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4765);
     }
-    /* ./parser//parser_prod.nit:6477 */
+    /* ./parser//parser_prod.nit:4767 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6481;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6483 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6483);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6484 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6484);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMinusExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AGgExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6487;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___visit_all_reverse;
+  fra.me.line = 4771;
+  fra.me.meth = LOCATE_parser_prod___AGgExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36577,57 +24994,52 @@ void parser_prod___AMinusExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6489 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6489);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4773);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6490 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6490);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4774);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
-  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+void parser_prod___AIsaExpr___empty_init(val_t p0, int* init_table){
+  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIsaExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos155]) 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 = 6443;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___empty_init;
+  fra.me.line = 4778;
+  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;
-  /* ./parser//parser_prod.nit:6443 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos155] = 1;
+  init_table[itpos163] = 1;
   return;
 }
-void parser_prod___AMinusExpr___init_aminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
+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;
   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[itpos164]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6445;
-  fra.me.meth = LOCATE_parser_prod___AMinusExpr___init_aminusexpr;
+  fra.me.line = 4780;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___init_aisaexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36636,95 +25048,47 @@ 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:6450 */
-  CALL_parser_prod___AMinusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4785 */
+  CALL_parser_prod___AIsaExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4786 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6451 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6451);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4786);
   }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4787 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6452 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6452);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4787);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4788 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6453 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6453);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4788);
   }
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4789 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6454 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6454);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4789);
   }
   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;
-  return;
-}
-void parser_prod___AStarshipExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6494;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6496 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6497 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6499;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6501 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6502 */
-  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[itpos164] = 1;
   return;
 }
-void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AIsaExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6519;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___replace_child;
+  fra.me.line = 4792;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -36734,15 +25098,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6521 */
+  /* ./parser//parser_prod.nit:4794 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6521);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4794);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36750,8 +25112,8 @@ 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:4795 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6522 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36765,42 +25127,34 @@ 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:4796 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6523 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6523);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4796);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4797 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6524 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6524);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4797);
       }
-      /* ./parser//parser_prod.nit:6525 */
-      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4798 */
+      ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6527 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6527);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4800 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4800);
     }
-    /* ./parser//parser_prod.nit:6529 */
+    /* ./parser//parser_prod.nit:4802 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6531 */
+  /* ./parser//parser_prod.nit:4804 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6531);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 4804);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36808,8 +25162,8 @@ 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:4805 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6532 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -36823,83 +25177,39 @@ 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:4806 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6533 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6533);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4806);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:6534 */
+      /* ./parser//parser_prod.nit:4807 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6534);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4807);
       }
-      /* ./parser//parser_prod.nit:6535 */
-      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4808 */
+      ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6537 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6537);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4810 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4810);
     }
-    /* ./parser//parser_prod.nit:6539 */
+    /* ./parser//parser_prod.nit:4812 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6543;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6545 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6545);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6546);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarshipExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AIsaExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6549;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___visit_all_reverse;
+  fra.me.line = 4816;
+  fra.me.meth = LOCATE_parser_prod___AIsaExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36907,57 +25217,52 @@ void parser_prod___AStarshipExpr___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6551 */
+  /* ./parser//parser_prod.nit:4818 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6551);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4818);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6552 */
+  /* ./parser//parser_prod.nit:4819 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AIsaExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6552);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 4819);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table){
-  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+void parser_prod___APlusExpr___empty_init(val_t p0, int* init_table){
+  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos157]) 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 = 6505;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___empty_init;
+  fra.me.line = 4823;
+  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;
-  /* ./parser//parser_prod.nit:6505 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos157] = 1;
+  init_table[itpos165] = 1;
   return;
 }
-void parser_prod___AStarshipExpr___init_astarshipexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+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;
   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[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6507;
-  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___init_astarshipexpr;
+  fra.me.line = 4825;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___init_aplusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -36966,95 +25271,47 @@ 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:6512 */
-  CALL_parser_prod___AStarshipExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4830 */
+  CALL_parser_prod___APlusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4831 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6513 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6513);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4831);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4832 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6514 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6514);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4832);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4833 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6515 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6515);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4833);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4834 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6516 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6516);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4834);
   }
   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;
-  return;
-}
-void parser_prod___AStarExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6556;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6558 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6559 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6561;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6563 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6564 */
-  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[itpos166] = 1;
   return;
 }
-void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___APlusExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6581;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___replace_child;
+  fra.me.line = 4837;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37064,13 +25321,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:4839 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6583 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6583);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4839);
   }
   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]));
@@ -37080,8 +25335,8 @@ 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:4840 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6584 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37095,40 +25350,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:4841 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6585 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6585);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4841);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4842 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6586 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6586);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4842);
       }
-      /* ./parser//parser_prod.nit:6587 */
+      /* ./parser//parser_prod.nit:4843 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6589 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6589);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4845 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4845);
     }
-    /* ./parser//parser_prod.nit:6591 */
+    /* ./parser//parser_prod.nit:4847 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4849 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6593 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6593);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4849);
   }
   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]));
@@ -37138,8 +25385,8 @@ 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:4850 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6594 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37153,83 +25400,39 @@ 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:4851 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6595 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6595);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4851);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4852 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6596 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6596);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4852);
       }
-      /* ./parser//parser_prod.nit:6597 */
+      /* ./parser//parser_prod.nit:4853 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6599 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6599);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4855 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4855);
     }
-    /* ./parser//parser_prod.nit:6601 */
+    /* ./parser//parser_prod.nit:4857 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6605;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6607 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6607);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6608 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6608);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStarExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___APlusExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6611;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___visit_all_reverse;
+  fra.me.line = 4861;
+  fra.me.meth = LOCATE_parser_prod___APlusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37237,57 +25440,52 @@ void parser_prod___AStarExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6613 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6613);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4863);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6614 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6614);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4864);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
-  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+void parser_prod___AMinusExpr___empty_init(val_t p0, int* init_table){
+  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos159]) 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 = 6567;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___empty_init;
+  fra.me.line = 4868;
+  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;
-  /* ./parser//parser_prod.nit:6567 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos159] = 1;
+  init_table[itpos167] = 1;
   return;
 }
-void parser_prod___AStarExpr___init_astarexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
+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;
   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[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6569;
-  fra.me.meth = LOCATE_parser_prod___AStarExpr___init_astarexpr;
+  fra.me.line = 4870;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___init_aminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37296,95 +25494,47 @@ 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:6574 */
-  CALL_parser_prod___AStarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4875 */
+  CALL_parser_prod___AMinusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4876 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6575 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6575);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4876);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4877 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6576 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6576);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4877);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4878 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6577 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6577);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4878);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4879 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6578 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6578);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4879);
   }
   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;
-  return;
-}
-void parser_prod___ASlashExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6618;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6620 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6621 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASlashExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6623;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6625 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6626 */
-  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[itpos168] = 1;
   return;
 }
-void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AMinusExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6643;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___replace_child;
+  fra.me.line = 4882;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37394,13 +25544,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:4884 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6645 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6645);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4884);
   }
   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]));
@@ -37410,8 +25558,8 @@ 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:4885 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6646 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37425,40 +25573,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:4886 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6647 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6647);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4886);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4887 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6648 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6648);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4887);
       }
-      /* ./parser//parser_prod.nit:6649 */
+      /* ./parser//parser_prod.nit:4888 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6651 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6651);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4890 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4890);
     }
-    /* ./parser//parser_prod.nit:6653 */
+    /* ./parser//parser_prod.nit:4892 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4894 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6655 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6655);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4894);
   }
   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]));
@@ -37468,8 +25608,8 @@ 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:4895 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6656 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37483,45 +25623,39 @@ 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:4896 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6657 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6657);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4896);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4897 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6658 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6658);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4897);
       }
-      /* ./parser//parser_prod.nit:6659 */
+      /* ./parser//parser_prod.nit:4898 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6661 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6661);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4900 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4900);
     }
-    /* ./parser//parser_prod.nit:6663 */
+    /* ./parser//parser_prod.nit:4902 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
+void parser_prod___AMinusExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6667;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all;
+  fra.me.line = 4906;
+  fra.me.meth = LOCATE_parser_prod___AMinusExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37529,95 +25663,52 @@ 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:4908 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6669 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6669);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4908);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6670 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6670);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4909);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASlashExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AStarshipExpr___empty_init(val_t p0, int* init_table){
+  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarshipExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 4913;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos170]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6673;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6675 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6675);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6676 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6676);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
-  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 6629;
-  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;
-  /* ./parser//parser_prod.nit:6629 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos161] = 1;
-  return;
-}
-void parser_prod___ASlashExpr___init_aslashexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos162 = 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[itpos162]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6631;
-  fra.me.meth = LOCATE_parser_prod___ASlashExpr___init_aslashexpr;
+  fra.me.line = 4915;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___init_astarshipexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37626,95 +25717,47 @@ 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:6636 */
-  CALL_parser_prod___ASlashExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4920 */
+  CALL_parser_prod___AStarshipExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4921 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6637 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6637);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4921);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4922 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6638 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6638);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4922);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4923 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6639 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6639);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4923);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4924 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6640 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6640);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4924);
   }
   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;
-  return;
-}
-void parser_prod___APercentExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6680;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6682 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6683 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APercentExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6685;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6687 */
-  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6688 */
-  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[itpos170] = 1;
   return;
 }
-void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AStarshipExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6705;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___replace_child;
+  fra.me.line = 4927;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -37724,13 +25767,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:4929 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6707 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6707);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4929);
   }
   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]));
@@ -37740,8 +25781,8 @@ 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:4930 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6708 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37755,40 +25796,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:4931 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6709 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6709);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4931);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4932 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6710 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6710);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4932);
       }
-      /* ./parser//parser_prod.nit:6711 */
+      /* ./parser//parser_prod.nit:4933 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6713 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6713);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4935 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4935);
     }
-    /* ./parser//parser_prod.nit:6715 */
+    /* ./parser//parser_prod.nit:4937 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:4939 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6717 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6717);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4939);
   }
   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]));
@@ -37798,8 +25831,8 @@ 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:4940 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6718 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -37813,83 +25846,39 @@ 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:4941 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6719 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6719);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4941);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4942 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6720 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6720);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4942);
       }
-      /* ./parser//parser_prod.nit:6721 */
+      /* ./parser//parser_prod.nit:4943 */
       ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6723 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6723);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4945 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4945);
     }
-    /* ./parser//parser_prod.nit:6725 */
+    /* ./parser//parser_prod.nit:4947 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6729;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6731 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6731);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6732 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6732);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APercentExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AStarshipExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6735;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___visit_all_reverse;
+  fra.me.line = 4951;
+  fra.me.meth = LOCATE_parser_prod___AStarshipExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37897,57 +25886,52 @@ void parser_prod___APercentExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6737 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6737);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4953);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6738 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6738);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4954);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APercentExpr___empty_init(val_t p0, int* init_table){
-  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+void parser_prod___AStarExpr___empty_init(val_t p0, int* init_table){
+  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos163]) 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 = 6691;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___empty_init;
+  fra.me.line = 4958;
+  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;
-  /* ./parser//parser_prod.nit:6691 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos163] = 1;
+  init_table[itpos171] = 1;
   return;
 }
-void parser_prod___APercentExpr___init_apercentexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+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;
   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[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6693;
-  fra.me.meth = LOCATE_parser_prod___APercentExpr___init_apercentexpr;
+  fra.me.line = 4960;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___init_astarexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -37956,95 +25940,47 @@ 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:6698 */
-  CALL_parser_prod___APercentExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4965 */
+  CALL_parser_prod___AStarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:4966 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6699 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6699);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4966);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:4967 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6700 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6700);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4967);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:4968 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6701 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6701);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 4968);
   }
   ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:4969 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6702 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6702);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4969);
   }
   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;
-  return;
-}
-void parser_prod___AUminusExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6747;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6749 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6750 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AUminusExpr___n_minus__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6742;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___n_minus__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6744 */
-  ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6745 */
-  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[itpos172] = 1;
   return;
 }
-void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___AStarExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6767;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___replace_child;
+  fra.me.line = 4972;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -38054,15 +25990,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6769 */
+  /* ./parser//parser_prod.nit:4974 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6769);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4974);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38070,8 +26004,8 @@ 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:4975 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6770 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -38085,42 +26019,34 @@ 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:4976 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6771 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6771);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4976);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinus, ID_TMinus)) /*cast TMinus*/;
-      /* ./parser//parser_prod.nit:6772 */
+      /* ./parser//parser_prod.nit:4977 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6772);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4977);
       }
-      /* ./parser//parser_prod.nit:6773 */
-      ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4978 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6775 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6775);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4980 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4980);
     }
-    /* ./parser//parser_prod.nit:6777 */
+    /* ./parser//parser_prod.nit:4982 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6779 */
+  /* ./parser//parser_prod.nit:4984 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6779);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4984);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38128,8 +26054,8 @@ 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:4985 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6780 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -38143,45 +26069,39 @@ 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:4986 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6781 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6781);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 4986);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:4987 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6782 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6782);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 4987);
       }
-      /* ./parser//parser_prod.nit:6783 */
-      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:4988 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6785 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6785);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:4990 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 4990);
     }
-    /* ./parser//parser_prod.nit:6787 */
+    /* ./parser//parser_prod.nit:4992 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
+void parser_prod___AStarExpr___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6791;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___visit_all;
+  fra.me.line = 4996;
+  fra.me.meth = LOCATE_parser_prod___AStarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -38189,95 +26109,52 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6793 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6793);
-    nit_exit(1);
-  }
-  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:4998 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6794 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6794);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AUminusExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6797;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6799 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minus");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6799);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 4998);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6800 */
+  /* ./parser//parser_prod.nit:4999 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6800);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 4999);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
-  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+void parser_prod___ASlashExpr___empty_init(val_t p0, int* init_table){
+  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASlashExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos165]) 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 = 6753;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___empty_init;
+  fra.me.line = 5003;
+  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;
-  /* ./parser//parser_prod.nit:6753 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos165] = 1;
+  init_table[itpos173] = 1;
   return;
 }
-void parser_prod___AUminusExpr___init_auminusexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+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;
   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[itpos174]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6755;
-  fra.me.meth = LOCATE_parser_prod___AUminusExpr___init_auminusexpr;
+  fra.me.line = 5005;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___init_aslashexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -38286,159 +26163,286 @@ 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:6760 */
-  CALL_parser_prod___AUminusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5010 */
+  CALL_parser_prod___ASlashExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5011 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6761 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6761);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5011);
   }
-  ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5012 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6762 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6762);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5012);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5013 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6763 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6763);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5013);
   }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5014 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6764 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6764);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5014);
   }
   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[itpos174] = 1;
   return;
 }
-void parser_prod___ANewExpr___n_kwnew__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___ASlashExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 6804;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_kwnew__eq;
+  fra.me.line = 5017;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:6806 */
-  ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6807 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5019 */
+  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);
+  }
+  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]));
+  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:5020 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:5021 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5021);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5022 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5023 */
+      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:5027 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:5029 */
+  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);
+  }
+  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]));
+  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:5030 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:5031 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5031);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5032 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5033 */
+      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:5037 */
+    goto label1;
+  }
+  label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANewExpr___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___ASlashExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6809;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_type__eq;
+  fra.me.line = 5041;
+  fra.me.meth = LOCATE_parser_prod___ASlashExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:6811 */
-  ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6812 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5043 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANewExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___APercentExpr___empty_init(val_t p0, int* init_table){
+  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APercentExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 5048;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
+  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 = 6814;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___n_id__eq;
+  fra.me.line = 5050;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___init_apercentexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:6816 */
-  ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5055 */
+  CALL_parser_prod___APercentExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5056 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5056);
+  }
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5057 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6817 */
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5057);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5058 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5058);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5059 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6818 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6818);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5059);
   }
+  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;
   return;
 }
-void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser_prod___APercentExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
-  val_t REGB2;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6847;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___replace_child;
+  fra.me.line = 5062;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6849 */
+  /* ./parser//parser_prod.nit:5064 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6849);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5064);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38446,8 +26450,8 @@ 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:5065 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6850 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -38461,42 +26465,34 @@ 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:5066 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6851 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6851);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5066);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnew, ID_TKwnew)) /*cast TKwnew*/;
-      /* ./parser//parser_prod.nit:6852 */
+      /* ./parser//parser_prod.nit:5067 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6852);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5067);
       }
-      /* ./parser//parser_prod.nit:6853 */
-      ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:5068 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6855 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6855);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5070 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5070);
     }
-    /* ./parser//parser_prod.nit:6857 */
+    /* ./parser//parser_prod.nit:5072 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6859 */
+  /* ./parser//parser_prod.nit:5074 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6859);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5074);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -38504,8 +26500,8 @@ 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:5075 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6860 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -38519,204 +26515,92 @@ 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:5076 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6861 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6861);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5076);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:6862 */
+      /* ./parser//parser_prod.nit:5077 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6862);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5077);
       }
-      /* ./parser//parser_prod.nit:6863 */
-      ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:5078 */
+      ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6865 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6865);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5080 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5080);
     }
-    /* ./parser//parser_prod.nit:6867 */
+    /* ./parser//parser_prod.nit:5082 */
     goto label1;
   }
-  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]));
-  /* ./parser//parser_prod.nit:6869 */
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___APercentExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5086;
+  fra.me.meth = LOCATE_parser_prod___APercentExpr___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:5088 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5088);
   }
+  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 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABinopExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6870 */
-    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)) {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6871 */
-      if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6871);
-        nit_exit(1);
-      }
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:6872 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6872);
-        nit_exit(1);
-      }
-      /* ./parser//parser_prod.nit:6873 */
-      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-    } else {
-      /* ./parser//parser_prod.nit:6875 */
-      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
-    }
-    /* ./parser//parser_prod.nit:6877 */
-    goto label1;
-  }
-  REGB0 = TAG_Int(0);
-  REGB1 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6879 */
-  if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6879);
-    nit_exit(1);
-  }
-  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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:6880 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6880);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
-        } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
-        }
-      }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:6881 */
-        if (UNTAG_Bool(REGB0)) {
-        } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
-          } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
-          }
-        }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:6882 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6882);
-            nit_exit(1);
-          }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:6883 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6883);
-            nit_exit(1);
-          }
-          fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:6884 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6884);
-            nit_exit(1);
-          }
-          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-        } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:6886 */
-          if (UNTAG_Bool(REGB0)) {
-          } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6886);
-            nit_exit(1);
-          }
-          fra.me.REG[4] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
-        }
-        /* ./parser//parser_prod.nit:6888 */
-        goto label1;
-      }
-    } else {
-      /* ./parser//parser_prod.nit:6879 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 5089);
   }
-  label2: while(0);
-  label1: while(0);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANewExpr___visit_all(val_t p0, val_t p1){
+void parser_prod___AUminusExpr___empty_init(val_t p0, int* init_table){
+  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AUminusExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 5093;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
+  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 = 6893;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all;
+  fra.me.line = 5095;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___init_auminusexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -38724,210 +26608,222 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6895 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5100 */
+  CALL_parser_prod___AUminusExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5101 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6895);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5101);
   }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6896 */
+  ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5102 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6896);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5102);
   }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6897 */
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5103 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:6898 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6898);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5103);
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6900 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5104 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6900);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:6901 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:6900 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5104);
   }
-  label1: while(0);
+  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;
   return;
 }
-void parser_prod___ANewExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+void parser_prod___AUminusExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 6905;
-  fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all_reverse;
+  fra.me.line = 5107;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6907 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5109 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnew");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6907);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_minus", LOCATE_parser_prod, 5109);
   }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6908 */
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6908);
-    nit_exit(1);
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  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]);
-  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6909 */
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
+    /* ./parser//parser_prod.nit:5110 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-      REGB0 = REGB1;
+      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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:6910 */
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
     if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5111 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5111);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5112 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5113 */
+      ATTR_parser_nodes___AUminusExpr____n_minus(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6910);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5115 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5115);
     }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+    /* ./parser//parser_prod.nit:5117 */
+    goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6913 */
+  /* ./parser//parser_prod.nit:5119 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6913);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5119);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:6914 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:6914 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:6915 */
+  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]));
+  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:5120 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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 {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6915);
-        nit_exit(1);
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:6916 */
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5121 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5121);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5122 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5123 */
+      ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6914 */
-      goto label1;
+      /* ./parser//parser_prod.nit:5125 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5125);
     }
+    /* ./parser//parser_prod.nit:5127 */
+    goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
+void parser_prod___AUminusExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5131;
+  fra.me.meth = LOCATE_parser_prod___AUminusExpr___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:5133 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
 void parser_prod___ANewExpr___empty_init(val_t p0, int* init_table){
-  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos167]) 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 = 6822;
+  fra.me.line = 5138;
   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;
-  /* ./parser//parser_prod.nit:6822 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos167] = 1;
+  init_table[itpos179] = 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 itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANewExpr].i;
+  int itpos180 = 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[itpos168]) 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 = 6824;
+  fra.me.line = 5140;
   fra.me.meth = LOCATE_parser_prod___ANewExpr___init_anewexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
@@ -38941,46 +26837,38 @@ 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:6831 */
+  /* ./parser//parser_prod.nit:5147 */
   CALL_parser_prod___ANewExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5148 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6832 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6832);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5148);
   }
   ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5149 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6833 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6833);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5149);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5150 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6834 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6834);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5150);
   }
   ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5151 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6835 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6835);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5151);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:6836 */
+  /* ./parser//parser_prod.nit:5152 */
   ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:5153 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6837 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -38994,101 +26882,67 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6838 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6838);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5154);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
   }
-  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser_prod.nit:6840 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
+  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;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5156 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ANewExpr___init_anewexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5157 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5158 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:6841 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6841);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:6842 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6842);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-      /* ./parser//parser_prod.nit:6843 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:6840 */
-      goto label1;
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5158);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos168] = 1;
-  return;
-}
-void parser_prod___AAttrExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6922;
-  fra.me.meth = LOCATE_parser_prod___AAttrExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6924 */
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6925 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6927;
-  fra.me.meth = LOCATE_parser_prod___AAttrExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6929 */
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6930 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ANewExpr___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6947;
-  fra.me.meth = LOCATE_parser_prod___AAttrExpr___replace_child;
+  fra.me.line = 5163;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -39098,15 +26952,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6949 */
+  /* ./parser//parser_prod.nit:5165 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6949);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser_prod, 5165);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39114,8 +26966,8 @@ 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:5166 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6950 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39129,42 +26981,34 @@ 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:5167 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6951 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6951);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5167);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:6952 */
+      /* ./parser//parser_prod.nit:5168 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6952);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5168);
       }
-      /* ./parser//parser_prod.nit:6953 */
-      ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:5169 */
+      ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6955 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6955);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5171 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5171);
     }
-    /* ./parser//parser_prod.nit:6957 */
+    /* ./parser//parser_prod.nit:5173 */
     goto label1;
   }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6959 */
+  /* ./parser//parser_prod.nit:5175 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6959);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 5175);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39172,8 +27016,8 @@ 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:5176 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:6960 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39187,45 +27031,189 @@ 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:5177 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:6961 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6961);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5177);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      /* ./parser//parser_prod.nit:6962 */
+      /* ./parser//parser_prod.nit:5178 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6962);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5178);
       }
-      /* ./parser//parser_prod.nit:6963 */
-      ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:5179 */
+      ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:6965 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6965);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5181 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5181);
     }
-    /* ./parser//parser_prod.nit:6967 */
+    /* ./parser//parser_prod.nit:5183 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:5185 */
+  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)) {
+  } 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:5186 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:5187 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5187);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5188 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5189 */
+      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:5191 */
+      ATTR_parser_nodes___ANewExpr____n_id(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:5193 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5195 */
+  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);
+  }
+  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]);
+  /* ./../lib/standard//kernel.nit:332 */
+  while(1) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5195 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5196 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5197 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5198 */
+          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);
+          }
+          /* ./parser//parser_prod.nit:5199 */
+          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);
+          }
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5200);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* ./parser//parser_prod.nit:5202 */
+          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);
+          }
+          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 */
+        goto label1;
+      }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
+    } else {
+      /* ./../lib/standard//kernel.nit:332 */
+      goto label2;
+    }
+  }
+  label2: while(0);
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
+void parser_prod___ANewExpr___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 = 6971;
-  fra.me.meth = LOCATE_parser_prod___AAttrExpr___visit_all;
+  fra.me.line = 5209;
+  fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -39233,94 +27221,104 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6973 */
+  /* ./parser//parser_prod.nit:5211 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_kwnew(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6973);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnew", LOCATE_parser_prod, 5211);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]);
+  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6974 */
+  /* ./parser//parser_prod.nit:5212 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6974);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 5212);
   }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6977;
-  fra.me.meth = LOCATE_parser_prod___AAttrExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6979 */
+  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 */
+  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)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6979);
-    nit_exit(1);
+    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;
+    }
   }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6980 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5214 */
+    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);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:5216 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ANewExpr____n_args(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6980);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5216);
+  }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ANewExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ANewExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5217 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void parser_prod___AAttrExpr___empty_init(val_t p0, int* init_table){
-  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos169]) 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 = 6933;
+  fra.me.line = 5222;
   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;
-  /* ./parser//parser_prod.nit:6933 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos169] = 1;
+  init_table[itpos181] = 1;
   return;
 }
 void parser_prod___AAttrExpr___init_aattrexpr(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrExpr].i;
+  int itpos182 = 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[itpos170]) 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 = 6935;
+  fra.me.line = 5224;
   fra.me.meth = LOCATE_parser_prod___AAttrExpr___init_aattrexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -39330,124 +27328,289 @@ 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:6940 */
+  /* ./parser//parser_prod.nit:5229 */
   CALL_parser_prod___AAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5230 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6941 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6941);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5230);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5231 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6942 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6942);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5231);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5232 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:6943 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6943);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5232);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5233 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:6944 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 6944);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5233);
   }
   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;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6984;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:6986 */
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6987 */
-  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[itpos182] = 1;
   return;
 }
-void parser_prod___AAttrAssignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 6989;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_id__eq;
+  fra.me.line = 5236;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:6991 */
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6992 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 6994;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5238 */
+  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);
+  }
+  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]));
+  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:5239 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        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:5240 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5240);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5241 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5242 */
+      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:5246 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:5248 */
+  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);
+  }
+  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]));
+  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:5249 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:5250 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5250);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5251 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:5252 */
+      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:5256 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAttrExpr___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5260;
+  fra.me.meth = LOCATE_parser_prod___AAttrExpr___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:6996 */
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:6997 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5262 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAttrAssignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  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 = 6999;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___n_value__eq;
+  fra.me.line = 5267;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  if (init_table[itpos184]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 5269;
+  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___init_aattrassignexpr;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7001 */
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7002 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:5276 */
+  CALL_parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5277 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5277);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5278 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5278);
+  }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5279 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5279);
+  }
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5280 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5280);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5281 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5281);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:5282 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5282);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5283 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5283);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5284 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5284);
+  }
+  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;
   return;
 }
 void parser_prod___AAttrAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -39457,7 +27620,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 = 7025;
+  fra.me.line = 5287;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -39468,13 +27631,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7027 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7027);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5289);
   }
   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]));
@@ -39484,8 +27645,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7028 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39499,40 +27660,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7029 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7029);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5291);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5292 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7030 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7030);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5292);
       }
-      /* ./parser//parser_prod.nit:7031 */
+      /* ./parser//parser_prod.nit:5293 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7033 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7033);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5295 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5295);
     }
-    /* ./parser//parser_prod.nit:7035 */
+    /* ./parser//parser_prod.nit:5297 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5299 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7037 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7037);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5299);
   }
   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]));
@@ -39542,8 +27695,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7038 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39557,40 +27710,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7039 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7039);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5301);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5302 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      /* ./parser//parser_prod.nit:7040 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7040);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5302);
       }
-      /* ./parser//parser_prod.nit:7041 */
+      /* ./parser//parser_prod.nit:5303 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7043 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7043);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5305 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5305);
     }
-    /* ./parser//parser_prod.nit:7045 */
+    /* ./parser//parser_prod.nit:5307 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5309 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7047 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7047);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5309);
   }
   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]));
@@ -39600,8 +27745,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7048 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39615,40 +27760,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7049 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7049);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5311);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5312 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:7050 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7050);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5312);
       }
-      /* ./parser//parser_prod.nit:7051 */
+      /* ./parser//parser_prod.nit:5313 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7053 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7053);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5315 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5315);
     }
-    /* ./parser//parser_prod.nit:7055 */
+    /* ./parser//parser_prod.nit:5317 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5319 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7057 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7057);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5319);
   }
   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]));
@@ -39658,8 +27795,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7058 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -39673,31 +27810,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7059 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7059);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5321);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5322 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7060 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7060);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5322);
       }
-      /* ./parser//parser_prod.nit:7061 */
+      /* ./parser//parser_prod.nit:5323 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7063 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7063);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5325 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5325);
     }
-    /* ./parser//parser_prod.nit:7065 */
+    /* ./parser//parser_prod.nit:5327 */
     goto label1;
   }
   label1: while(0);
@@ -39710,7 +27841,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 = 7069;
+  fra.me.line = 5331;
   fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -39719,135 +27850,68 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7071 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7071);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7072 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7072);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7073 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7073);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7074 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7074);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrAssignExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7077;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7079 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7079);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5333);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7080 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7080);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5334);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7081 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7081);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5335);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7082 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7082);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5336);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAttrAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+void parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos171]) 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 = 7005;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___empty_init;
+  fra.me.line = 5340;
+  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;
-  /* ./parser//parser_prod.nit:7005 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos171] = 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 itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrAssignExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos172]) 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 = 7007;
-  fra.me.meth = LOCATE_parser_prod___AAttrAssignExpr___init_aattrassignexpr;
+  fra.me.line = 5342;
+  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -39860,158 +27924,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:7014 */
-  CALL_parser_prod___AAttrAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5349 */
+  CALL_parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5350 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7015 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7015);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5350);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5351 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7016 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7016);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5351);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5352 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7017 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7017);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5352);
   }
   ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5353 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7018 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7018);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5353);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5354 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7019 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7019);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5354);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:5355 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7020 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7020);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5355);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5356 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7021 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7021);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5356);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5357 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7022 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7022);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5357);
   }
   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[itpos172] = 1;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7086;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7088 */
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7089 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7091;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7093 */
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7094 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7096;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_assign_op__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7098 */
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7099 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7101;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7103 */
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7104 */
-  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[itpos186] = 1;
   return;
 }
 void parser_prod___AAttrReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -40021,7 +27989,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 = 7127;
+  fra.me.line = 5360;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -40032,13 +28000,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7129 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7129);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5362);
   }
   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]));
@@ -40048,8 +28014,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7130 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40063,40 +28029,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7131 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7131);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5364);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5365 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7132 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7132);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5365);
       }
-      /* ./parser//parser_prod.nit:7133 */
+      /* ./parser//parser_prod.nit:5366 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7135 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7135);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5368 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5368);
     }
-    /* ./parser//parser_prod.nit:7137 */
+    /* ./parser//parser_prod.nit:5370 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5372 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7139 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7139);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5372);
   }
   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]));
@@ -40106,8 +28064,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7140 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40121,40 +28079,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7141 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7141);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5374);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5375 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      /* ./parser//parser_prod.nit:7142 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7142);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5375);
       }
-      /* ./parser//parser_prod.nit:7143 */
+      /* ./parser//parser_prod.nit:5376 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7145 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7145);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5378 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5378);
     }
-    /* ./parser//parser_prod.nit:7147 */
+    /* ./parser//parser_prod.nit:5380 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5382 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7149 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7149);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5382);
   }
   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]));
@@ -40164,8 +28114,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7150 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40179,40 +28129,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7151 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7151);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5384);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5385 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
-      /* ./parser//parser_prod.nit:7152 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7152);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5385);
       }
-      /* ./parser//parser_prod.nit:7153 */
+      /* ./parser//parser_prod.nit:5386 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7155 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7155);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5388 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5388);
     }
-    /* ./parser//parser_prod.nit:7157 */
+    /* ./parser//parser_prod.nit:5390 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5392 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7159 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7159);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5392);
   }
   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]));
@@ -40222,8 +28164,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7160 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40237,31 +28179,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7161 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7161);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5394);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5395 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7162 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7162);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5395);
       }
-      /* ./parser//parser_prod.nit:7163 */
+      /* ./parser//parser_prod.nit:5396 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7165 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7165);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5398 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5398);
     }
-    /* ./parser//parser_prod.nit:7167 */
+    /* ./parser//parser_prod.nit:5400 */
     goto label1;
   }
   label1: while(0);
@@ -40274,7 +28210,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 = 7171;
+  fra.me.line = 5404;
   fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -40283,135 +28219,68 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7173 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7173);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7174 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7174);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7175 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7175);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7176 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7176);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAttrReassignExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7179;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7181 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7181);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5406);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7182 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7182);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5407);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7183 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7183);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5408);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7184 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7184);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5409);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAttrReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
+void parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
+  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos173]) 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 = 7107;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___empty_init;
+  fra.me.line = 5413;
+  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;
-  /* ./parser//parser_prod.nit:7107 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos173] = 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 itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAttrReassignExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos174]) 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 = 7109;
-  fra.me.meth = LOCATE_parser_prod___AAttrReassignExpr___init_aattrreassignexpr;
+  fra.me.line = 5415;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -40424,147 +28293,140 @@ 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:7116 */
-  CALL_parser_prod___AAttrReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5422 */
+  CALL_parser_prod___ACallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5423 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7117 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7117);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5423);
   }
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5424 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7118 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7118);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5424);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5425 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7119 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7119);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5425);
   }
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5426 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7120 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7120);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5426);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7121 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7121);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7122 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7122);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7123 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7123);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7124 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7124);
-    nit_exit(1);
-  }
-  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[itpos174] = 1;
-  return;
-}
-void parser_prod___ACallExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7188;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7190 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7191 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7193;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7195 */
-  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7196 */
-  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[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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5427 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5428 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5429 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ACallExpr___init_acallexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5432 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5433 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5434 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7225;
+  fra.me.line = 5439;
   fra.me.meth = LOCATE_parser_prod___ACallExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5441 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7227 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7227);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5441);
   }
   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]));
@@ -40574,8 +28436,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7228 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40589,40 +28451,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7229 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7229);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5443);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5444 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7230 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7230);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5444);
       }
-      /* ./parser//parser_prod.nit:7231 */
+      /* ./parser//parser_prod.nit:5445 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7233 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7233);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5447 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5447);
     }
-    /* ./parser//parser_prod.nit:7235 */
+    /* ./parser//parser_prod.nit:5449 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5451 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7237 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7237);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5451);
   }
   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]));
@@ -40632,8 +28486,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7238 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -40647,237 +28501,221 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7239 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7239);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5453);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5454 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:7240 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7240);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5454);
       }
-      /* ./parser//parser_prod.nit:7241 */
+      /* ./parser//parser_prod.nit:5455 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7243 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7243);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5457 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5457);
     }
-    /* ./parser//parser_prod.nit:7245 */
+    /* ./parser//parser_prod.nit:5459 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5461 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7247 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7247);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5461);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7248 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7248);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5461 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5462 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7249 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5463 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7250 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5464 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7250);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5464);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7251 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5465 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7251);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5465);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7252 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7252);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5466);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7254 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5468 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7254);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5468);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7256 */
+        /* ./parser//parser_prod.nit:5470 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7247 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7259 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:5473 */
+  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 {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7259);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5473);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7260 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7260);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5473 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5474 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7261 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5475 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-          /* ./parser//parser_prod.nit:7262 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5476 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7262);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5476);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7263 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:5477 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7263);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5477);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7264 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7264);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5478);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7266 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:5480 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7266);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5480);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          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:7268 */
+        /* ./parser//parser_prod.nit:5482 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7259 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
   label1: while(0);
@@ -40885,99 +28723,13 @@ void parser_prod___ACallExpr___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ACallExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7273;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7275 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7275);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7276 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7276);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7277 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7277);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7278 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:7277 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7280 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7280);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7281 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:7280 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallExpr___visit_all_reverse(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 = 7285;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all_reverse;
+  fra.me.line = 5487;
+  fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -40985,356 +28737,244 @@ void parser_prod___ACallExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7287 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7287);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5489);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7288 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7288);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5490);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7290 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7290);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5491);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7291 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7291 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7292 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7292);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7293 */
-    } else {
-      /* ./parser//parser_prod.nit:7291 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7297 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7297);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5494);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7298 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7298 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7299 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7299);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7300 */
-    } else {
-      /* ./parser//parser_prod.nit:7298 */
-      goto label2;
-    }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ACallExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5492 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ACallExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5495 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallExpr___empty_init(val_t p0, int* init_table){
-  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
+void parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos175]) 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 = 7199;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___empty_init;
+  fra.me.line = 5500;
+  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;
-  /* ./parser//parser_prod.nit:7199 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos175] = 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 itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos176]) 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 = 7201;
-  fra.me.meth = LOCATE_parser_prod___ACallExpr___init_acallexpr;
+  fra.me.line = 5502;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7208 */
-  CALL_parser_prod___ACallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[5] = p5;
+  /* ./parser//parser_prod.nit:5510 */
+  CALL_parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5511 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7209 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7209);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5511);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5512 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7210 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7210);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5512);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5513 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7211 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7211);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5513);
   }
   ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5514 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7212 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7212);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5514);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7213 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7214 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7214);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7215 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7215);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7216 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7213 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+  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 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5520);
   }
-  label1: while(0);
-  fra.me.REG[4] = CALL_abstract_collection___Collection___iterator(fra.me.REG[4])(fra.me.REG[4]);
-  /* ./parser//parser_prod.nit:7218 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[4])(fra.me.REG[4]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[4])(fra.me.REG[4]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-      /* ./parser//parser_prod.nit:7219 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7219);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7220 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7220);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[3]);
-      /* ./parser//parser_prod.nit:7221 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7218 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[4])(fra.me.REG[4]);
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5521 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5521);
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos176] = 1;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7306;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7308 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7309 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7311;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7313 */
-  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7314 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7316;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7318 */
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7319 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7321;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7323 */
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7324 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5522 */
+  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5522);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:5523 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5523);
+  }
+  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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5515 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5516 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5517 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7353;
+  fra.me.line = 5526;
   fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5528 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7355 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7355);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5528);
   }
   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]));
@@ -41344,8 +28984,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7356 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -41359,40 +28999,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7357 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7357);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5530);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5531 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7358 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7358);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5531);
       }
-      /* ./parser//parser_prod.nit:7359 */
+      /* ./parser//parser_prod.nit:5532 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7361 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7361);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5534 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5534);
     }
-    /* ./parser//parser_prod.nit:7363 */
+    /* ./parser//parser_prod.nit:5536 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5538 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7365 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7365);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5538);
   }
   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]));
@@ -41402,8 +29034,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7366 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -41417,250 +29049,223 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7367 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7367);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5540);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5541 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:7368 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7368);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5541);
       }
-      /* ./parser//parser_prod.nit:7369 */
+      /* ./parser//parser_prod.nit:5542 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7371 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7371);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5544 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5544);
     }
-    /* ./parser//parser_prod.nit:7373 */
+    /* ./parser//parser_prod.nit:5546 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5548 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7375 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7375);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5548);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7376 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7376);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5548 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5549 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7377 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5550 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7378 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5551 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7378);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5551);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7379 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5552 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7379);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5552);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7380 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7380);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5553);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7382 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5555 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7382);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5555);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7384 */
+        /* ./parser//parser_prod.nit:5557 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7375 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7387 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5560 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7387);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5560);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7388 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5561 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7389 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7389);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5562 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5562);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:7390 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5563 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7390);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5563);
       }
-      /* ./parser//parser_prod.nit:7391 */
+      /* ./parser//parser_prod.nit:5564 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7393 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7393);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5566 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5566);
     }
-    /* ./parser//parser_prod.nit:7395 */
+    /* ./parser//parser_prod.nit:5568 */
     goto label1;
   }
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7397 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5570 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7397);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5570);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7398 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5571 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7399 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7399);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5572 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5572);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7400 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5573 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7400);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5573);
       }
-      /* ./parser//parser_prod.nit:7401 */
+      /* ./parser//parser_prod.nit:5574 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7403 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7403);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5576 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5576);
     }
-    /* ./parser//parser_prod.nit:7405 */
+    /* ./parser//parser_prod.nit:5578 */
     goto label1;
   }
   label1: while(0);
@@ -41668,96 +29273,13 @@ void parser_prod___ACallAssignExpr___replace_child(val_t p0, val_t p1, val_t p2)
   return;
 }
 void parser_prod___ACallAssignExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7409;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7411 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7411);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7412 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7412);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7413 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7413);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7414 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:7413 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7416 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7416);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7417 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7417);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallAssignExpr___visit_all_reverse(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 = 7420;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all_reverse;
+  fra.me.line = 5582;
+  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -41765,114 +29287,96 @@ void parser_prod___ACallAssignExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7422 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7422);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5584);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7423 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7423);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5585);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7425 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7425);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5586);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7426 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7426 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7427 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7427);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7428 */
-    } else {
-      /* ./parser//parser_prod.nit:7426 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7431 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7431);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5589);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7432 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7432);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5590);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ACallAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+  void OC_parser_prod___ACallAssignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5587 */
+    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;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos177]) 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 = 7327;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___empty_init;
+  fra.me.line = 5594;
+  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;
-  /* ./parser//parser_prod.nit:7327 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos177] = 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 itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallAssignExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos178]) 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 = 7329;
-  fra.me.meth = LOCATE_parser_prod___ACallAssignExpr___init_acallassignexpr;
+  fra.me.line = 5596;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
   fra.me.REG[0] = NIT_NULL;
@@ -41887,220 +29391,128 @@ 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:7337 */
-  CALL_parser_prod___ACallAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5604 */
+  CALL_parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5605 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7338 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7338);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5605);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5606 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7339 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7339);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5606);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5607 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7340 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7340);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5607);
   }
   ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5608 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7341 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7341);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5608);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7342 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7343 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7343);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7344 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7344);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7345 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7342 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7347 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7347);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5614);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5615 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7348 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7348);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5615);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5616 */
   REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7349 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7349);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5616);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:5617 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7350 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7350);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5617);
   }
   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[itpos178] = 1;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7436;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7438 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit: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;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7441;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7443 */
-  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7444 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7446;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_assign_op__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7448 */
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7449 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7451;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7453 */
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7454 */
-  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[itpos192] = 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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5609 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5610 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5611 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7483;
+  fra.me.line = 5620;
   fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5622 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7485 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7485);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5622);
   }
   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]));
@@ -42110,8 +29522,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7486 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -42125,40 +29537,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7487 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7487);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5624);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5625 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7488 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7488);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5625);
       }
-      /* ./parser//parser_prod.nit:7489 */
+      /* ./parser//parser_prod.nit:5626 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7491 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7491);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5628 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5628);
     }
-    /* ./parser//parser_prod.nit:7493 */
+    /* ./parser//parser_prod.nit:5630 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5632 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7495 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7495);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5632);
   }
   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]));
@@ -42168,8 +29572,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7496 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -42183,250 +29587,223 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7497 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7497);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5634);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5635 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:7498 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7498);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5635);
       }
-      /* ./parser//parser_prod.nit:7499 */
+      /* ./parser//parser_prod.nit:5636 */
       ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7501 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7501);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5638 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5638);
     }
-    /* ./parser//parser_prod.nit:7503 */
+    /* ./parser//parser_prod.nit:5640 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5642 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7505 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7505);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5642);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7506 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7506);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5642 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5643 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7507 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5644 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7508 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5645 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7508);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5645);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7509 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5646 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7509);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5646);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7510 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7510);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5647);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7512 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5649 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7512);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5649);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7514 */
+        /* ./parser//parser_prod.nit:5651 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7505 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7517 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5654 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7517);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5654);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7518 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5655 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7519 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7519);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5656 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5656);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
-      /* ./parser//parser_prod.nit:7520 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5657 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7520);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5657);
       }
-      /* ./parser//parser_prod.nit:7521 */
+      /* ./parser//parser_prod.nit:5658 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7523 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7523);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5660 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5660);
     }
-    /* ./parser//parser_prod.nit:7525 */
+    /* ./parser//parser_prod.nit:5662 */
     goto label1;
   }
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7527 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5664 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7527);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5664);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7528 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5665 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7529 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7529);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5666 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5666);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7530 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5667 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7530);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5667);
       }
-      /* ./parser//parser_prod.nit:7531 */
+      /* ./parser//parser_prod.nit:5668 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7533 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7533);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5670 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5670);
     }
-    /* ./parser//parser_prod.nit:7535 */
+    /* ./parser//parser_prod.nit:5672 */
     goto label1;
   }
   label1: while(0);
@@ -42434,96 +29811,13 @@ void parser_prod___ACallReassignExpr___replace_child(val_t p0, val_t p1, val_t p
   return;
 }
 void parser_prod___ACallReassignExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7539;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7541 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7541);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7542 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7542);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7543 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7543);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7544 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:7543 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7546 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7546);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7547 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7547);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACallReassignExpr___visit_all_reverse(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 = 7550;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all_reverse;
+  fra.me.line = 5676;
+  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -42531,254 +29825,113 @@ void parser_prod___ACallReassignExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7552 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7552);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5678);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7553 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7553);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 5679);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7555 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7555);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5680);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7556 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7556 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7557 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7557);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7558 */
-    } else {
-      /* ./parser//parser_prod.nit:7556 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7561 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7561);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 5683);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7562 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7562);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5684);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ACallReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
+  void OC_parser_prod___ACallReassignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5681 */
+    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;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos179]) 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 = 7457;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___empty_init;
+  fra.me.line = 5688;
+  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;
-  /* ./parser//parser_prod.nit:7457 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos179] = 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 itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACallReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos180]) 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 = 7459;
-  fra.me.meth = LOCATE_parser_prod___ACallReassignExpr___init_acallreassignexpr;
+  fra.me.line = 5690;
+  fra.me.meth = LOCATE_parser_prod___ASuperExpr___init_asuperexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  /* ./parser//parser_prod.nit:7467 */
-  CALL_parser_prod___ACallReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7468 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7468);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7469 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7469);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7470 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7470);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ACallFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7471 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7471);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7472 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7473 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7473);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7474 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7474);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ACallFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7475 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7472 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7477 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7477);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7478 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7478);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[5]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7479 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7479);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7480 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7480);
-    nit_exit(1);
-  }
-  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[itpos180] = 1;
-  return;
-}
-void parser_prod___ASuperExpr___n_qualified__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7566;
-  fra.me.meth = LOCATE_parser_prod___ASuperExpr___n_qualified__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7568 */
+  /* ./parser//parser_prod.nit:5696 */
+  CALL_parser_prod___ASuperExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5697 */
   ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5698 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7569 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
@@ -42792,61 +29945,92 @@ void parser_prod___ASuperExpr___n_qualified__eq(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5699 */
     REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7570 */
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7570);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5699);
     }
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
   }
+  /* ./parser//parser_prod.nit:5701 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5701);
+  }
+  ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5702 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    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]);
+  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;
   return;
 }
-void parser_prod___ASuperExpr___n_kwsuper__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7573;
-  fra.me.meth = LOCATE_parser_prod___ASuperExpr___n_kwsuper__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7575 */
-  ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7576 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5703 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASuperExpr___init_asuperexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5704 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5705 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7601;
+  fra.me.line = 5710;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5712 */
   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]));
-  /* ./parser//parser_prod.nit:7603 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -42859,8 +30043,8 @@ void parser_prod___ASuperExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5713 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7604 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -42874,38 +30058,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7605 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7605);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5714);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5715 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AQualified, ID_AQualified)) /*cast AQualified*/;
-      /* ./parser//parser_prod.nit:7606 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7606);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5715);
       }
-      /* ./parser//parser_prod.nit:7607 */
+      /* ./parser//parser_prod.nit:5716 */
       ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7609 */
+      /* ./parser//parser_prod.nit:5718 */
       ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:7611 */
+    /* ./parser//parser_prod.nit:5720 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5722 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7613 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7613);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 5722);
   }
   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]));
@@ -42915,8 +30093,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7614 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -42930,134 +30108,123 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7615 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7615);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5724);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5725 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwsuper, ID_TKwsuper)) /*cast TKwsuper*/;
-      /* ./parser//parser_prod.nit:7616 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7616);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5725);
       }
-      /* ./parser//parser_prod.nit:7617 */
+      /* ./parser//parser_prod.nit:5726 */
       ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7619 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7619);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5728 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5728);
     }
-    /* ./parser//parser_prod.nit:7621 */
+    /* ./parser//parser_prod.nit:5730 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5732 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7623 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7623);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5732);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7624 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7624);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5732 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5733 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7625 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5734 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7626 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5735 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7626);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5735);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7627 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5736 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7627);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5736);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7628 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7628);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5737);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7630 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5739 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7630);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5739);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7632 */
+        /* ./parser//parser_prod.nit:5741 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7623 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -43071,7 +30238,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 = 7637;
+  fra.me.line = 5746;
   fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43080,9 +30247,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7639 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -43096,175 +30263,81 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:7640 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7640);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5749);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:5751 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7642 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7642);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 5751);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7643 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7643);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5752);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7644 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:7643 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASuperExpr___visit_all_reverse(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 = 7648;
-  fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7650 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:7651 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7651);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7653 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwsuper");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7653);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7655 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7655);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7656 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7656 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7657 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7657);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7658 */
-    } else {
-      /* ./parser//parser_prod.nit:7656 */
-      goto label1;
-    }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperExpr___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ASuperExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASuperExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5753 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASuperExpr___empty_init(val_t p0, int* init_table){
-  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+void parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
+  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos181]) 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 = 7579;
-  fra.me.meth = LOCATE_parser_prod___ASuperExpr___empty_init;
+  fra.me.line = 5758;
+  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;
-  /* ./parser//parser_prod.nit:7579 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos181] = 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 itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos182]) 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 = 7581;
-  fra.me.meth = LOCATE_parser_prod___ASuperExpr___init_asuperexpr;
+  fra.me.line = 5760;
+  fra.me.meth = LOCATE_parser_prod___AInitExpr___init_ainitexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -43275,155 +30348,102 @@ 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:7587 */
-  CALL_parser_prod___ASuperExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  /* ./parser//parser_prod.nit:7588 */
-  ATTR_parser_nodes___ASuperExpr____n_qualified(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7589 */
+  /* ./parser//parser_prod.nit:5766 */
+  CALL_parser_prod___AInitExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5767 */
+  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;
-    }
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5767);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5768 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7590 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7590);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5768);
   }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5769 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7592 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7592);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5769);
   }
-  ATTR_parser_nodes___ASuperExpr____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:5770 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7593 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7593);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5770);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7594 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+  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;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5771 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AInitExpr___init_ainitexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5772 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5773 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7595 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7595);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7596 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7596);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ASuperExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7597 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:7594 */
-      goto label1;
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5773);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos182] = 1;
-  return;
-}
-void parser_prod___AInitExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7664;
-  fra.me.meth = LOCATE_parser_prod___AInitExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7666 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7667 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInitExpr___n_kwinit__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7669;
-  fra.me.meth = LOCATE_parser_prod___AInitExpr___n_kwinit__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7671 */
-  ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7672 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void parser_prod___AInitExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7695;
+  fra.me.line = 5778;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5780 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7697 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7697);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5780);
   }
   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]));
@@ -43433,8 +30453,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7698 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -43448,40 +30468,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7699 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7699);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5782);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5783 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7700 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7700);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5783);
       }
-      /* ./parser//parser_prod.nit:7701 */
+      /* ./parser//parser_prod.nit:5784 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7703 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7703);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5786 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5786);
     }
-    /* ./parser//parser_prod.nit:7705 */
+    /* ./parser//parser_prod.nit:5788 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5790 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7707 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7707);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 5790);
   }
   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]));
@@ -43491,8 +30503,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7708 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -43506,134 +30518,123 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7709 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7709);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5792);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5793 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwinit, ID_TKwinit)) /*cast TKwinit*/;
-      /* ./parser//parser_prod.nit:7710 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7710);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5793);
       }
-      /* ./parser//parser_prod.nit:7711 */
+      /* ./parser//parser_prod.nit:5794 */
       ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7713 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7713);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5796 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5796);
     }
-    /* ./parser//parser_prod.nit:7715 */
+    /* ./parser//parser_prod.nit:5798 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5800 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7717 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7717);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5800);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7718 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7718);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5800 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5801 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7719 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5802 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7720 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5803 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7720);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5803);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7721 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5804 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7721);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5804);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7722 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7722);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            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]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7724 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5807 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7724);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5807);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7726 */
+        /* ./parser//parser_prod.nit:5809 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7717 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -43646,7 +30647,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 = 7731;
+  fra.me.line = 5814;
   fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -43655,286 +30656,211 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7733 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7733);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5816);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7734 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7734);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwinit", LOCATE_parser_prod, 5817);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7735 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7735);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5818);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7736 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:7735 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AInitExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5819 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
+void parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
+  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 5824;
+  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;
   return;
 }
-void parser_prod___AInitExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
+  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 = 7740;
-  fra.me.meth = LOCATE_parser_prod___AInitExpr___visit_all_reverse;
+  fra.me.line = 5826;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7742 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7742);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7743 */
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:5832 */
+  CALL_parser_prod___ABraExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5833 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwinit");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7743);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5833);
   }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7745 */
+  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5834 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7745);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5834);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7746 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7746 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7747 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7747);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7748 */
-    } else {
-      /* ./parser//parser_prod.nit:7746 */
-      goto label1;
-    }
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AInitExpr___empty_init(val_t p0, int* init_table){
-  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 7675;
-  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;
-  /* ./parser//parser_prod.nit:7675 */
+  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[itpos183] = 1;
+  init_table[itpos198] = 1;
   return;
 }
-void parser_prod___AInitExpr___init_ainitexpr(val_t p0, val_t p1, val_t p2, val_t p3, int* init_table){
-  int itpos184 = 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[itpos184]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7677;
-  fra.me.meth = LOCATE_parser_prod___AInitExpr___init_ainitexpr;
-  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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:7683 */
-  CALL_parser_prod___AInitExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7684 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7684);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7685 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7685);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7686 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7686);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AInitExpr____n_kwinit(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7687 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7687);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7688 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5835 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5836 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5837 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ABraExpr___init_abraexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5840 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5841 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5842 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7689 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7689);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7690 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7690);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___AInitExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7691 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:7688 */
-      goto label1;
+      nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5842);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos184] = 1;
-  return;
-}
-void parser_prod___ABraExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7754;
-  fra.me.meth = LOCATE_parser_prod___ABraExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7756 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7757 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7783;
+  fra.me.line = 5847;
   fra.me.meth = LOCATE_parser_prod___ABraExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5849 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7785 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7785);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5849);
   }
   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]));
@@ -43944,8 +30870,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7786 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -43959,237 +30885,221 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7787 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7787);
-        nit_exit(1);
+        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]);
+      /* ./parser//parser_prod.nit:5852 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7788 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7788);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5852);
       }
-      /* ./parser//parser_prod.nit:7789 */
+      /* ./parser//parser_prod.nit:5853 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7791 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7791);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5855 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5855);
     }
-    /* ./parser//parser_prod.nit:7793 */
+    /* ./parser//parser_prod.nit:5857 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5859 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7795 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7795);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5859);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7796 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7796);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5859 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5860 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7797 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5861 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7798 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5862 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7798);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5862);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7799 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5863 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7799);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5863);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7800 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7800);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5864);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7802 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5866 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7802);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5866);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7804 */
+        /* ./parser//parser_prod.nit:5868 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7795 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7807 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:5871 */
+  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 {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7807);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5871);
   }
   fra.me.REG[3] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7808 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7808);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5871 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5872 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7809 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5873 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-          /* ./parser//parser_prod.nit:7810 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5874 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7810);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5874);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7811 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:5875 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7811);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5875);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7812 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7812);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5876);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7814 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:5878 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7814);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5878);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          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:7816 */
+        /* ./parser//parser_prod.nit:5880 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7807 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
   label1: while(0);
@@ -44197,89 +31107,13 @@ void parser_prod___ABraExpr___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ABraExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7821;
-  fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7823 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7823);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7824 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7824);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7825 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:7824 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7827 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7827);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:7828 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:7827 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraExpr___visit_all_reverse(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 = 7832;
-  fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all_reverse;
+  fra.me.line = 5885;
+  fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -44287,121 +31121,100 @@ void parser_prod___ABraExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7834 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7834);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5887);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7836 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7836);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5888);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7837 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7837 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7838 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7838);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7839 */
-    } else {
-      /* ./parser//parser_prod.nit:7837 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7843 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7843);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 5891);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7844 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7844 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7845 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7845);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7846 */
-    } else {
-      /* ./parser//parser_prod.nit:7844 */
-      goto label2;
-    }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ABraExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5889 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___ABraExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5892 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraExpr___empty_init(val_t p0, int* init_table){
-  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+void parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos185]) 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 = 7760;
-  fra.me.meth = LOCATE_parser_prod___ABraExpr___empty_init;
+  fra.me.line = 5897;
+  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;
-  /* ./parser//parser_prod.nit:7760 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos185] = 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 itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraExpr].i;
+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;
   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[itpos200]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7762;
-  fra.me.meth = LOCATE_parser_prod___ABraExpr___init_abraexpr;
+  fra.me.line = 5899;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
@@ -44413,182 +31226,116 @@ 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:7768 */
-  CALL_parser_prod___ABraExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:5906 */
+  CALL_parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5907 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7769 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7769);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5907);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5908 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7770 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7770);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5908);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7771 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
+  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 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5914);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:5915 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5915);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5916 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5916);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5917 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5917);
+  }
+  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;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5909 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5910 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7772 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7772);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7773 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7773);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-      /* ./parser//parser_prod.nit:7774 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:7771 */
-      goto label1;
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5910);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:7776 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+    /* ./parser//parser_prod.nit:5911 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-      /* ./parser//parser_prod.nit:7777 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7777);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7778 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7778);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___ASendExpr____n_closure_defs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7779 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
     } else {
-      /* ./parser//parser_prod.nit:7776 */
-      goto label2;
+      nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5911);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos186] = 1;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7852;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7854 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7855 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7857;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7859 */
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7860 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7862;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7864 */
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7865 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
 void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7891;
+  fra.me.line = 5920;
   fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:5922 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7893 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7893);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5922);
   }
   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]));
@@ -44598,8 +31345,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7894 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -44613,250 +31360,223 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7895 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7895);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5924);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:5925 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7896 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7896);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5925);
       }
-      /* ./parser//parser_prod.nit:7897 */
+      /* ./parser//parser_prod.nit:5926 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7899 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7899);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5928 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5928);
     }
-    /* ./parser//parser_prod.nit:7901 */
+    /* ./parser//parser_prod.nit:5930 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:5932 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7903 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7903);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5932);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7904 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7904);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:5932 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:5933 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:7905 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:5934 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:7906 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:5935 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7906);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5935);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7907 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5936 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7907);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5936);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:7908 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7908);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5937);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:7910 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:5939 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7910);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5939);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:7912 */
+        /* ./parser//parser_prod.nit:5941 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:7903 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7915 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5944 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7915);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5944);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7916 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5945 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7917 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7917);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5946 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5946);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:7918 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5947 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7918);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5947);
       }
-      /* ./parser//parser_prod.nit:7919 */
+      /* ./parser//parser_prod.nit:5948 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7921 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7921);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5950 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5950);
     }
-    /* ./parser//parser_prod.nit:7923 */
+    /* ./parser//parser_prod.nit:5952 */
     goto label1;
   }
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7925 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:5954 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7925);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5954);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:7926 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:5955 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:7927 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7927);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:5956 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5956);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7928 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:5957 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7928);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 5957);
       }
-      /* ./parser//parser_prod.nit:7929 */
+      /* ./parser//parser_prod.nit:5958 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:7931 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7931);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:5960 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 5960);
     }
-    /* ./parser//parser_prod.nit:7933 */
+    /* ./parser//parser_prod.nit:5962 */
     goto label1;
   }
   label1: while(0);
@@ -44864,86 +31584,13 @@ void parser_prod___ABraAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ABraAssignExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7937;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7939 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7939);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7940 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7940);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:7941 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:7940 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7943 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7943);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7944 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7944);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraAssignExpr___visit_all_reverse(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 = 7947;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all_reverse;
+  fra.me.line = 5966;
+  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -44951,294 +31598,209 @@ void parser_prod___ABraAssignExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7949 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7949);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 5968);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7951 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7951);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 5969);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7952 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:7952 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7953 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7953);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:7954 */
-    } else {
-      /* ./parser//parser_prod.nit:7952 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7957 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7957);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 5972);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7958 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7958);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 5973);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABraAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
+  void OC_parser_prod___ABraAssignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5970 */
+    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;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos187]) 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 = 7868;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___empty_init;
+  fra.me.line = 5977;
+  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;
-  /* ./parser//parser_prod.nit:7868 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos187] = 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 itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraAssignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  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[itpos202]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7870;
-  fra.me.meth = LOCATE_parser_prod___ABraAssignExpr___init_abraassignexpr;
+  fra.me.line = 5979;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
   fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7877 */
-  CALL_parser_prod___ABraAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5986 */
+  CALL_parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:5987 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7878 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7878);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5987);
   }
   ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:5988 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7879 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7879);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5988);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7880 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7881 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7881);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7882 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7882);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-      /* ./parser//parser_prod.nit:7883 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7880 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7885 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7885);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5994);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:5995 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7886 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7886);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5995);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:5996 */
   REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7887 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7887);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 5996);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:5997 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7888 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7888);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 5997);
   }
   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[itpos188] = 1;
+  init_table[itpos202] = 1;
   return;
 }
-void parser_prod___ABraReassignExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:5989 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:5990 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:5991 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7962;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7964 */
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7965 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7967;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_assign_op__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7969 */
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7970 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 7972;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:7974 */
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:7975 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t REGB2;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8001;
+  fra.me.line = 6000;
   fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6002 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8003 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8003);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6002);
   }
   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]));
@@ -45248,8 +31810,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8004 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -45263,250 +31825,223 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8005 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8005);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6004);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6005 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8006 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8006);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6005);
       }
-      /* ./parser//parser_prod.nit:8007 */
+      /* ./parser//parser_prod.nit:6006 */
       ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8009 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8009);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6008 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6008);
     }
-    /* ./parser//parser_prod.nit:8011 */
+    /* ./parser//parser_prod.nit:6010 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6012 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8013 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8013);
-    nit_exit(1);
+    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]);
   REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8014 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8014);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:6012 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:6013 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:8015 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:6014 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:8016 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:6015 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8016);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6015);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8017 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6016 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8017);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6016);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:8018 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8018);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6017);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8020 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6019 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8020);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6019);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:8022 */
+        /* ./parser//parser_prod.nit:6021 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:8013 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8025 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:6024 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8025);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6024);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8026 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:6025 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8027 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8027);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:6026 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6026);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
-      /* ./parser//parser_prod.nit:8028 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:6027 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8028);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6027);
       }
-      /* ./parser//parser_prod.nit:8029 */
+      /* ./parser//parser_prod.nit:6028 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8031 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8031);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6030 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6030);
     }
-    /* ./parser//parser_prod.nit:8033 */
+    /* ./parser//parser_prod.nit:6032 */
     goto label1;
   }
-  REGB1 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8035 */
-  if (UNTAG_Bool(REGB1)) {
+  /* ./parser//parser_prod.nit:6034 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8035);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6034);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_OO(fra.me.REG[3],fra.me.REG[1]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-    REGB1 = REGB0;
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8036 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:6035 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8037 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8037);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:6036 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6036);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8038 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:6037 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8038);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6037);
       }
-      /* ./parser//parser_prod.nit:8039 */
+      /* ./parser//parser_prod.nit:6038 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8041 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8041);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6040 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6040);
     }
-    /* ./parser//parser_prod.nit:8043 */
+    /* ./parser//parser_prod.nit:6042 */
     goto label1;
   }
   label1: while(0);
@@ -45514,86 +32049,13 @@ void parser_prod___ABraReassignExpr___replace_child(val_t p0, val_t p1, val_t p2
   return;
 }
 void parser_prod___ABraReassignExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8047;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8049 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8049);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8050 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8050);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:8051 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:8050 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8053 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8053);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8054 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8054);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABraReassignExpr___visit_all_reverse(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 = 8057;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all_reverse;
+  fra.me.line = 6046;
+  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -45601,254 +32063,219 @@ void parser_prod___ABraReassignExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8059 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8059);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6048);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8061 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8061);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6049);
   }
   fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:8062 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:8062 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8063 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8063);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:8064 */
-    } else {
-      /* ./parser//parser_prod.nit:8062 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8067 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8067);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6052);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8068 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8068);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6053);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABraReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
+  void OC_parser_prod___ABraReassignExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6050 */
+    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;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos189]) 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 = 7978;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___empty_init;
+  fra.me.line = 6057;
+  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;
-  /* ./parser//parser_prod.nit:7978 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos189] = 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 itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABraReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos190]) 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 = 7980;
-  fra.me.meth = LOCATE_parser_prod___ABraReassignExpr___init_abrareassignexpr;
+  fra.me.line = 6059;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:7987 */
-  CALL_parser_prod___ABraReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6065 */
+  CALL_parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6066 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7988 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7988);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6066);
   }
-  ATTR_parser_nodes___ASendExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6067 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7989 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7989);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:7990 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:7991 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7991);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:7992 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7992);
-        nit_exit(1);
-      }
-      fra.me.REG[5] = ATTR_parser_nodes___ABraFormExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[1]);
-      /* ./parser//parser_prod.nit:7993 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:7990 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7995 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7995);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7996 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7996);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:7997 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7997);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:7998 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 7998);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6067);
   }
-  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[itpos190] = 1;
-  return;
-}
-void parser_prod___AClosureCallExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8072;
-  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8074 */
-  ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8075 */
   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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:6068 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6069 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:6070 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AClosureCallExpr___init_aclosurecallexpr_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:6073 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6074 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:6075 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8101;
+  fra.me.line = 6080;
   fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6082 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8103 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8103);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6082);
   }
   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]));
@@ -45858,8 +32285,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8104 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -45873,237 +32300,221 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8105 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8105);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6084);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6085 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:8106 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8106);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6085);
       }
-      /* ./parser//parser_prod.nit:8107 */
+      /* ./parser//parser_prod.nit:6086 */
       ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8109 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8109);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6088 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6088);
     }
-    /* ./parser//parser_prod.nit:8111 */
+    /* ./parser//parser_prod.nit:6090 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6092 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8113 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8113);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6092);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8114 */
-      if (UNTAG_Bool(REGB0)) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:6092 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:6093 */
+      REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8114);
-        nit_exit(1);
+        nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6093);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
       } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:8115 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:6094 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:8116 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:6095 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8116);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6095);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8117 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6096 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8117);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6096);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:8118 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8118);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6097);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8120 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6099 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8120);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6099);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:8122 */
+        /* ./parser//parser_prod.nit:6101 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:8113 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
-  REGB1 = TAG_Int(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8125 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:6104 */
+  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 {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8125);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6104);
   }
   fra.me.REG[3] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB1, REGB0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  REGB1 = CALL_abstract_collection___Collection___length(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8126 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8126);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB0);
-      REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB1 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:6104 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:6105 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB1 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB1)) {
-        REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:8127 */
-        if (UNTAG_Bool(REGB1)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:6106 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB1 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB1 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-        if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-          /* ./parser//parser_prod.nit:8128 */
-          if (UNTAG_Bool(REGB1)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:6107 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8128);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6107);
           }
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8129 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:6108 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8129);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6108);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB0, fra.me.REG[2]);
-          REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:8130 */
-          if (UNTAG_Bool(REGB1)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8130);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6109);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8132 */
-          if (UNTAG_Bool(REGB1)) {
+          /* ./parser//parser_prod.nit:6111 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8132);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6111);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB0);
+          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:8134 */
+        /* ./parser//parser_prod.nit:6113 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:8125 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label3;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label3: while(0);
   label1: while(0);
@@ -46111,89 +32522,13 @@ void parser_prod___AClosureCallExpr___replace_child(val_t p0, val_t p1, val_t p2
   return;
 }
 void parser_prod___AClosureCallExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8139;
-  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8141 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8141);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8142 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8142);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:8143 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:8142 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8145 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8145);
-    nit_exit(1);
-  }
-  fra.me.REG[0] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:8146 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:8145 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureCallExpr___visit_all_reverse(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 = 8150;
-  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all_reverse;
+  fra.me.line = 6118;
+  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -46201,239 +32536,123 @@ void parser_prod___AClosureCallExpr___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8152 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8152);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6120);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8154 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8154);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_args", LOCATE_parser_prod, 6121);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:8155 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:8155 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8156 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8156);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:8157 */
-    } else {
-      /* ./parser//parser_prod.nit:8155 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8161 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8161);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_closure_defs", LOCATE_parser_prod, 6124);
   }
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:8162 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:8162 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8163 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8163);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:8164 */
-    } else {
-      /* ./parser//parser_prod.nit:8162 */
-      goto label2;
-    }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AClosureCallExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6122 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
+  void OC_parser_prod___AClosureCallExpr___visit_all_2(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6125 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureCallExpr___empty_init(val_t p0, int* init_table){
-  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
+void parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
+  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos191]) 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 = 8078;
-  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___empty_init;
+  fra.me.line = 6130;
+  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;
-  /* ./parser//parser_prod.nit:8078 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 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 itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureCallExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos192]) 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 = 8080;
-  fra.me.meth = LOCATE_parser_prod___AClosureCallExpr___init_aclosurecallexpr;
+  fra.me.line = 6132;
+  fra.me.meth = LOCATE_parser_prod___AVarExpr___init_avarexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:8086 */
-  CALL_parser_prod___AClosureCallExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6136 */
+  CALL_parser_prod___AVarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6137 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8087 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8087);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6137);
   }
-  ATTR_parser_nodes___AClosureCallExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6138 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8088 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8088);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:8089 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[1] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[1], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8090 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8090);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8091 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_args");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8091);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AClosureCallExpr____n_args(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-      /* ./parser//parser_prod.nit:8092 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:8089 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:8094 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AClosureDef, ID_AClosureDef)) /*cast AClosureDef*/;
-      /* ./parser//parser_prod.nit:8095 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8095);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8096 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_closure_defs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8096);
-        nit_exit(1);
-      }
-      fra.me.REG[1] = ATTR_parser_nodes___AClosureCallExpr____n_closure_defs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:8097 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:8094 */
-      goto label2;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6138);
   }
-  label2: while(0);
-  stack_frame_head = fra.me.prev;
-  init_table[itpos192] = 1;
-  return;
-}
-void parser_prod___AVarExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8170;
-  fra.me.meth = LOCATE_parser_prod___AVarExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8172 */
-  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8173 */
   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;
   return;
 }
 void parser_prod___AVarExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -46443,7 +32662,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 = 8187;
+  fra.me.line = 6141;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -46454,13 +32673,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8189 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8189);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6143);
   }
   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]));
@@ -46470,8 +32687,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8190 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -46485,31 +32702,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8191 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8191);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6145);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6146 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:8192 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8192);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6146);
       }
-      /* ./parser//parser_prod.nit:8193 */
+      /* ./parser//parser_prod.nit:6147 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8195 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8195);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6149 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6149);
     }
-    /* ./parser//parser_prod.nit:8197 */
+    /* ./parser//parser_prod.nit:6151 */
     goto label1;
   }
   label1: while(0);
@@ -46522,7 +32733,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 = 8201;
+  fra.me.line = 6155;
   fra.me.meth = LOCATE_parser_prod___AVarExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -46530,188 +32741,122 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8203 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8203);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8206;
-  fra.me.meth = LOCATE_parser_prod___AVarExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8208 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8208);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6157);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AVarExpr___empty_init(val_t p0, int* init_table){
-  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
+void parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_table){
+  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos193]) 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 = 8176;
-  fra.me.meth = LOCATE_parser_prod___AVarExpr___empty_init;
+  fra.me.line = 6161;
+  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;
-  /* ./parser//parser_prod.nit:8176 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
+  init_table[itpos207] = 1;
   return;
 }
-void parser_prod___AVarExpr___init_avarexpr(val_t p0, val_t p1, int* init_table){
-  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos194]) 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 = 8178;
-  fra.me.meth = LOCATE_parser_prod___AVarExpr___init_avarexpr;
+  fra.me.line = 6163;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___init_avarassignexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:8182 */
-  CALL_parser_prod___AVarExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:6169 */
+  CALL_parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6170 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8183 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8183);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6170);
   }
   ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6171 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8184 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8184);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6171);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6172 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6172);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6173 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6173);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6174 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6174);
+  }
+  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:6175 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6175);
+  }
+  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[itpos194] = 1;
+  init_table[itpos208] = 1;
   return;
 }
-void parser_prod___AVarAssignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 8212;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_id__eq;
+  fra.me.line = 6178;
+  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8214 */
-  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8215 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___n_assign__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8217;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_assign__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8219 */
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8220 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8222;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8224 */
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8225 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 8245;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___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[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:6180 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8247 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8247);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6180);
   }
   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]));
@@ -46721,8 +32866,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8248 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -46736,40 +32881,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8249 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8249);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6182);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6183 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:8250 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8250);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6183);
       }
-      /* ./parser//parser_prod.nit:8251 */
+      /* ./parser//parser_prod.nit:6184 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8253 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8253);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6186 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6186);
     }
-    /* ./parser//parser_prod.nit:8255 */
+    /* ./parser//parser_prod.nit:6188 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6190 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8257 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8257);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6190);
   }
   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]));
@@ -46779,8 +32916,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8258 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -46794,40 +32931,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8259 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8259);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6192);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6193 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAssign, ID_TAssign)) /*cast TAssign*/;
-      /* ./parser//parser_prod.nit:8260 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8260);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6193);
       }
-      /* ./parser//parser_prod.nit:8261 */
+      /* ./parser//parser_prod.nit:6194 */
       ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8263 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8263);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6196 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6196);
     }
-    /* ./parser//parser_prod.nit:8265 */
+    /* ./parser//parser_prod.nit:6198 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6200 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8267 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8267);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6200);
   }
   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]));
@@ -46837,8 +32966,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8268 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -46852,31 +32981,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8269 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8269);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6202);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6203 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8270 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8270);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6203);
       }
-      /* ./parser//parser_prod.nit:8271 */
+      /* ./parser//parser_prod.nit:6204 */
       ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8273 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8273);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6206 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6206);
     }
-    /* ./parser//parser_prod.nit:8275 */
+    /* ./parser//parser_prod.nit:6208 */
     goto label1;
   }
   label1: while(0);
@@ -46889,7 +33012,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 = 8279;
+  fra.me.line = 6212;
   fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -46898,115 +33021,60 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8281 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8281);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6214);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8282 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8282);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign", LOCATE_parser_prod, 6215);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8283 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8283);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6216);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AVarAssignExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8286;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8288 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8288);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8289 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8289);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8290 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8290);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarAssignExpr___empty_init(val_t p0, int* init_table){
-  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+void parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_table){
+  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos195]) 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 = 8228;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___empty_init;
+  fra.me.line = 6220;
+  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;
-  /* ./parser//parser_prod.nit:8228 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 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 itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarAssignExpr].i;
+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;
   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[itpos210]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8230;
-  fra.me.meth = LOCATE_parser_prod___AVarAssignExpr___init_avarassignexpr;
+  fra.me.line = 6222;
+  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___init_avarreassignexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -47017,121 +33085,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:8236 */
-  CALL_parser_prod___AVarAssignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6228 */
+  CALL_parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6229 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8237 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8237);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6229);
   }
   ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6230 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8238 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8238);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6230);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6231 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8239 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8239);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6231);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_assign(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6232 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8240 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8240);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6232);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6233 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8241 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8241);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6233);
   }
-  ATTR_parser_nodes___AAssignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:6234 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8242 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8242);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6234);
   }
   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[itpos196] = 1;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8294;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8296 */
-  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8297 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_assign_op__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8299;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_assign_op__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8301 */
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8302 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___n_value__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8304;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___n_value__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8306 */
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8307 */
-  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[itpos210] = 1;
   return;
 }
 void parser_prod___AVarReassignExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -47141,7 +33137,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 = 8327;
+  fra.me.line = 6237;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47152,13 +33148,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8329 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8329);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6239);
   }
   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]));
@@ -47168,8 +33162,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8330 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47183,40 +33177,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8331 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8331);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6241);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6242 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:8332 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8332);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6242);
       }
-      /* ./parser//parser_prod.nit:8333 */
+      /* ./parser//parser_prod.nit:6243 */
       ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8335 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8335);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6245 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6245);
     }
-    /* ./parser//parser_prod.nit:8337 */
+    /* ./parser//parser_prod.nit:6247 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6249 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8339 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8339);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6249);
   }
   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]));
@@ -47226,8 +33212,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8340 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47241,40 +33227,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8341 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8341);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6251);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6252 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AAssignOp, ID_AAssignOp)) /*cast AAssignOp*/;
-      /* ./parser//parser_prod.nit:8342 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8342);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6252);
       }
-      /* ./parser//parser_prod.nit:8343 */
+      /* ./parser//parser_prod.nit:6253 */
       ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8345 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8345);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6255 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6255);
     }
-    /* ./parser//parser_prod.nit:8347 */
+    /* ./parser//parser_prod.nit:6257 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6259 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8349 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8349);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6259);
   }
   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]));
@@ -47284,8 +33262,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8350 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47299,31 +33277,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8351 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8351);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6261);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6262 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8352 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8352);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6262);
       }
-      /* ./parser//parser_prod.nit:8353 */
+      /* ./parser//parser_prod.nit:6263 */
       ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8355 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8355);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6265 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6265);
     }
-    /* ./parser//parser_prod.nit:8357 */
+    /* ./parser//parser_prod.nit:6267 */
     goto label1;
   }
   label1: while(0);
@@ -47336,7 +33308,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 = 8361;
+  fra.me.line = 6271;
   fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -47345,220 +33317,98 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8363 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8363);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8364);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8365);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AVarReassignExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8368;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8370 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8370);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 6273);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8371 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_assign_op");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8371);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_assign_op", LOCATE_parser_prod, 6274);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8372 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_value");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8372);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_value", LOCATE_parser_prod, 6275);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AVarReassignExpr___empty_init(val_t p0, int* init_table){
-  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
+void parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos197]) 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 = 8310;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___empty_init;
+  fra.me.line = 6279;
+  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;
-  /* ./parser//parser_prod.nit:8310 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 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 itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AVarReassignExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos198]) 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 = 8312;
-  fra.me.meth = LOCATE_parser_prod___AVarReassignExpr___init_avarreassignexpr;
+  fra.me.line = 6281;
+  fra.me.meth = LOCATE_parser_prod___ARangeExpr___init_arangeexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:8318 */
-  CALL_parser_prod___AVarReassignExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6286 */
+  CALL_parser_prod___ARangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6287 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8319 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8319);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6287);
   }
-  ATTR_parser_nodes___AVarFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6288 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8320 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8320);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6288);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6289 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8321 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8321);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6289);
   }
-  ATTR_parser_nodes___AReassignFormExpr____n_assign_op(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6290 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8322 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8322);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6290);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8323 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8323);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AReassignFormExpr____n_value(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8324 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8324);
-    nit_exit(1);
-  }
-  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[itpos198] = 1;
-  return;
-}
-void parser_prod___ARangeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8376;
-  fra.me.meth = LOCATE_parser_prod___ARangeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8378 */
-  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8379 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ARangeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8381;
-  fra.me.meth = LOCATE_parser_prod___ARangeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8383 */
-  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8384 */
-  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[itpos212] = 1;
   return;
 }
 void parser_prod___ARangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -47568,7 +33418,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 = 8401;
+  fra.me.line = 6293;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47579,13 +33429,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8403 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8403);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6295);
   }
   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]));
@@ -47595,8 +33443,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8404 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47610,40 +33458,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8405 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8405);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6297);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6298 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8406 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8406);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6298);
       }
-      /* ./parser//parser_prod.nit:8407 */
+      /* ./parser//parser_prod.nit:6299 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8409 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8409);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6301 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6301);
     }
-    /* ./parser//parser_prod.nit:8411 */
+    /* ./parser//parser_prod.nit:6303 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6305 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8413 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8413);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6305);
   }
   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]));
@@ -47653,8 +33493,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8414 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47668,31 +33508,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8415 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8415);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6307);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6308 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8416 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8416);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6308);
       }
-      /* ./parser//parser_prod.nit:8417 */
+      /* ./parser//parser_prod.nit:6309 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8419 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8419);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6311 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6311);
     }
-    /* ./parser//parser_prod.nit:8421 */
+    /* ./parser//parser_prod.nit:6313 */
     goto label1;
   }
   label1: while(0);
@@ -47705,7 +33539,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 = 8425;
+  fra.me.line = 6317;
   fra.me.meth = LOCATE_parser_prod___ARangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -47714,95 +33548,52 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8427 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8427);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8428 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8428);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ARangeExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8431;
-  fra.me.meth = LOCATE_parser_prod___ARangeExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8433 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8433);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6319);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8434 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8434);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6320);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ARangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+void parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos199]) 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 = 8387;
-  fra.me.meth = LOCATE_parser_prod___ARangeExpr___empty_init;
+  fra.me.line = 6324;
+  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;
-  /* ./parser//parser_prod.nit:8387 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 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 itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ARangeExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos200]) 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 = 8389;
-  fra.me.meth = LOCATE_parser_prod___ARangeExpr___init_arangeexpr;
+  fra.me.line = 6326;
+  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___init_acrangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -47811,84 +33602,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:8394 */
-  CALL_parser_prod___ARangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6331 */
+  CALL_parser_prod___ACrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6332 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8395 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8395);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6332);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6333 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8396 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8396);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6333);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6334 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8397 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8397);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6334);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6335 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8398 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8398);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6335);
   }
   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[itpos200] = 1;
-  return;
-}
-void parser_prod___ACrangeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8438;
-  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8440 */
-  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8441 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8443;
-  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8445 */
-  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8446 */
-  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[itpos214] = 1;
   return;
 }
 void parser_prod___ACrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -47898,7 +33641,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 = 8463;
+  fra.me.line = 6338;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -47909,13 +33652,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8465 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8465);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6340);
   }
   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]));
@@ -47925,8 +33666,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8466 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47940,40 +33681,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8467 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8467);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6342);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6343 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8468 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8468);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6343);
       }
-      /* ./parser//parser_prod.nit:8469 */
+      /* ./parser//parser_prod.nit:6344 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8471 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8471);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6346 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6346);
     }
-    /* ./parser//parser_prod.nit:8473 */
+    /* ./parser//parser_prod.nit:6348 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6350 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8475 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8475);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6350);
   }
   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]));
@@ -47983,8 +33716,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8476 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -47998,31 +33731,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8477 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8477);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6352);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6353 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8478 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8478);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6353);
       }
-      /* ./parser//parser_prod.nit:8479 */
+      /* ./parser//parser_prod.nit:6354 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8481 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8481);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6356 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6356);
     }
-    /* ./parser//parser_prod.nit:8483 */
+    /* ./parser//parser_prod.nit:6358 */
     goto label1;
   }
   label1: while(0);
@@ -48035,7 +33762,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 = 8487;
+  fra.me.line = 6362;
   fra.me.meth = LOCATE_parser_prod___ACrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48044,95 +33771,52 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8489 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8489);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8490 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8490);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACrangeExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8493;
-  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8495 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8495);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6364);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8496 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8496);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6365);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ACrangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+void parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
+  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos201]) 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 = 8449;
-  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___empty_init;
+  fra.me.line = 6369;
+  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;
-  /* ./parser//parser_prod.nit:8449 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 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 itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACrangeExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos202]) 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 = 8451;
-  fra.me.meth = LOCATE_parser_prod___ACrangeExpr___init_acrangeexpr;
+  fra.me.line = 6371;
+  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___init_aorangeexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -48141,84 +33825,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:8456 */
-  CALL_parser_prod___ACrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6376 */
+  CALL_parser_prod___AOrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6377 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8457 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8457);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6377);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6378 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8458 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8458);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6378);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6379 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8459 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8459);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6379);
   }
   ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6380 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8460 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8460);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6380);
   }
   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[itpos202] = 1;
-  return;
-}
-void parser_prod___AOrangeExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8500;
-  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8502 */
-  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8503 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___n_expr2__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8505;
-  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___n_expr2__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8507 */
-  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8508 */
-  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[itpos216] = 1;
   return;
 }
 void parser_prod___AOrangeExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -48228,7 +33864,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 = 8525;
+  fra.me.line = 6383;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48239,13 +33875,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8527 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8527);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6385);
   }
   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]));
@@ -48255,8 +33889,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8528 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -48270,40 +33904,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8529 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8529);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6387);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6388 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8530 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8530);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6388);
       }
-      /* ./parser//parser_prod.nit:8531 */
+      /* ./parser//parser_prod.nit:6389 */
       ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8533 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8533);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6391 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6391);
     }
-    /* ./parser//parser_prod.nit:8535 */
+    /* ./parser//parser_prod.nit:6393 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6395 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8537 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8537);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6395);
   }
   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]));
@@ -48313,8 +33939,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8538 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -48328,31 +33954,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8539 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8539);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6397);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6398 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8540 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8540);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6398);
       }
-      /* ./parser//parser_prod.nit:8541 */
+      /* ./parser//parser_prod.nit:6399 */
       ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8543 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8543);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6401 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6401);
     }
-    /* ./parser//parser_prod.nit:8545 */
+    /* ./parser//parser_prod.nit:6403 */
     goto label1;
   }
   label1: while(0);
@@ -48365,7 +33985,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 = 8549;
+  fra.me.line = 6407;
   fra.me.meth = LOCATE_parser_prod___AOrangeExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -48374,264 +33994,218 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8551 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8551);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8552 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8552);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AOrangeExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8555;
-  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8557 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8557);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6409);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8558 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr2");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8558);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr2", LOCATE_parser_prod, 6410);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AOrangeExpr___empty_init(val_t p0, int* init_table){
-  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
+void parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
+  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos203]) 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 = 8511;
-  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___empty_init;
+  fra.me.line = 6414;
+  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;
-  /* ./parser//parser_prod.nit:8511 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 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 itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AOrangeExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos204]) 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 = 8513;
-  fra.me.meth = LOCATE_parser_prod___AOrangeExpr___init_aorangeexpr;
+  fra.me.line = 6416;
+  fra.me.meth = LOCATE_parser_prod___AArrayExpr___init_aarrayexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:8518 */
-  CALL_parser_prod___AOrangeExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8519 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8519);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ARangeExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8520 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8520);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8521 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8521);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ARangeExpr____n_expr2(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8522 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8522);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6420 */
+  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[itpos204] = 1;
+  init_table[itpos218] = 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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:6421 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AArrayExpr___init_aarrayexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6422 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:6423 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8577;
+  fra.me.line = 6428;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6430 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8579 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8579);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6430);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8580 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8580);
-        nit_exit(1);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:6430 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:6431 */
+      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);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:8581 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:6432 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:8582 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:6433 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8582);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6433);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8583 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6434 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8583);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6434);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:8584 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8584);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6435);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:8586 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6437 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8586);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6437);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:8588 */
+        /* ./parser//parser_prod.nit:6439 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:8579 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -48639,202 +34213,100 @@ void parser_prod___AArrayExpr___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AArrayExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8593;
+  fra.me.line = 6444;
   fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   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:6446 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8595 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8595);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6446);
   }
   fra.me.REG[0] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:8596 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:8595 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AArrayExpr___visit_all_reverse(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 = 8600;
-  fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8603 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8603);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:8604 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:8604 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8605 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8605);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:8606 */
-    } else {
-      /* ./parser//parser_prod.nit:8604 */
-      goto label1;
-    }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___AArrayExpr___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AArrayExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AArrayExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6447 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AArrayExpr___empty_init(val_t p0, int* init_table){
-  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
+void parser_prod___ASelfExpr___empty_init(val_t p0, int* init_table){
+  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos205]) 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 = 8563;
-  fra.me.meth = LOCATE_parser_prod___AArrayExpr___empty_init;
+  fra.me.line = 6452;
+  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;
-  /* ./parser//parser_prod.nit:8563 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
-  return;
-}
-void parser_prod___AArrayExpr___init_aarrayexpr(val_t p0, val_t p1, int* init_table){
-  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AArrayExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos206]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8565;
-  fra.me.meth = LOCATE_parser_prod___AArrayExpr___init_aarrayexpr;
-  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;
-  /* ./parser//parser_prod.nit:8569 */
-  CALL_parser_prod___AArrayExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:8570 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:8571 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8571);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:8572 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8572);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___AArrayExpr____n_exprs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:8573 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:8570 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos206] = 1;
+  init_table[itpos219] = 1;
   return;
 }
-void parser_prod___ASelfExpr___n_kwself__eq(val_t p0, val_t p1){
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos220]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8612;
-  fra.me.meth = LOCATE_parser_prod___ASelfExpr___n_kwself__eq;
+  fra.me.line = 6454;
+  fra.me.meth = LOCATE_parser_prod___ASelfExpr___init_aselfexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8614 */
+  /* ./parser//parser_prod.nit:6458 */
+  CALL_parser_prod___ASelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6459 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6459);
+  }
   ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6460 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8615 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8615);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6460);
   }
   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;
   return;
 }
 void parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -48844,7 +34316,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 = 8629;
+  fra.me.line = 6463;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -48855,9 +34327,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:8631 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -48870,8 +34342,8 @@ void parser_prod___ASelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:6466 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8632 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -48885,31 +34357,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8633 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8633);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6467);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6468 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwself, ID_TKwself)) /*cast TKwself*/;
-      /* ./parser//parser_prod.nit:8634 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8634);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6468);
       }
-      /* ./parser//parser_prod.nit:8635 */
+      /* ./parser//parser_prod.nit:6469 */
       ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8637 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8637);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6471 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6471);
     }
-    /* ./parser//parser_prod.nit:8639 */
+    /* ./parser//parser_prod.nit:6473 */
     goto label1;
   }
   label1: while(0);
@@ -48921,7 +34387,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 = 8643;
+  fra.me.line = 6477;
   fra.me.meth = LOCATE_parser_prod___ASelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -48929,86 +34395,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 */
   fra.me.REG[0] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:8645 */
-  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___ASelfExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8648;
-  fra.me.meth = LOCATE_parser_prod___ASelfExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[0] = ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]);
-  /* ./parser//parser_prod.nit:8650 */
   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___ASelfExpr___empty_init(val_t p0, int* init_table){
-  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
+void parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_table){
+  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos207]) 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 = 8618;
-  fra.me.meth = LOCATE_parser_prod___ASelfExpr___empty_init;
+  fra.me.line = 6483;
+  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;
-  /* ./parser//parser_prod.nit:8618 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
+  init_table[itpos221] = 1;
   return;
 }
-void parser_prod___ASelfExpr___init_aselfexpr(val_t p0, val_t p1, int* init_table){
-  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASelfExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
+void parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0, int* init_table){
+  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos208]) 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 = 8620;
-  fra.me.meth = LOCATE_parser_prod___ASelfExpr___init_aselfexpr;
+  fra.me.line = 6485;
+  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 1;
   fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8624 */
-  CALL_parser_prod___ASelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8625 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8625);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ASelfExpr____n_kwself(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8626 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8626);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6487 */
+  CALL_parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos208] = 1;
+  init_table[itpos222] = 1;
   return;
 }
 void parser_prod___AImplicitSelfExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49016,7 +34442,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 = 8662;
+  fra.me.line = 6490;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -49026,7 +34452,6 @@ void parser_prod___AImplicitSelfExpr___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:8662 */
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -49035,7 +34460,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 = 8666;
+  fra.me.line = 6494;
   fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49043,82 +34468,59 @@ void parser_prod___AImplicitSelfExpr___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:8666 */
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8670;
-  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8670 */
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AImplicitSelfExpr___empty_init(val_t p0, int* init_table){
-  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 8655;
-  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;
-  /* ./parser//parser_prod.nit:8655 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
   return;
 }
-void parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr(val_t p0, int* init_table){
-  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AImplicitSelfExpr].i;
+void parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
+  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos210]) 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 = 8657;
-  fra.me.meth = LOCATE_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr;
+  fra.me.line = 6499;
+  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;
-  /* ./parser//parser_prod.nit:8659 */
-  CALL_parser_prod___AImplicitSelfExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
-  init_table[itpos210] = 1;
+  init_table[itpos223] = 1;
   return;
 }
-void parser_prod___ATrueExpr___n_kwtrue__eq(val_t p0, val_t p1){
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
+  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 = 8675;
-  fra.me.meth = LOCATE_parser_prod___ATrueExpr___n_kwtrue__eq;
+  fra.me.line = 6501;
+  fra.me.meth = LOCATE_parser_prod___ATrueExpr___init_atrueexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8677 */
+  /* ./parser//parser_prod.nit:6505 */
+  CALL_parser_prod___ATrueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6506 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6506);
+  }
   ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8678 */
+  /* ./parser//parser_prod.nit:6507 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6507);
+  }
   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;
   return;
 }
 void parser_prod___ATrueExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49128,7 +34530,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 = 8692;
+  fra.me.line = 6510;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49139,13 +34541,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8694 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8694);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser_prod, 6512);
   }
   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]));
@@ -49155,8 +34555,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8695 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -49170,31 +34570,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8696 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8696);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6514);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6515 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwtrue, ID_TKwtrue)) /*cast TKwtrue*/;
-      /* ./parser//parser_prod.nit:8697 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8697);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6515);
       }
-      /* ./parser//parser_prod.nit:8698 */
+      /* ./parser//parser_prod.nit:6516 */
       ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8700 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8700);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6518 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6518);
     }
-    /* ./parser//parser_prod.nit:8702 */
+    /* ./parser//parser_prod.nit:6520 */
     goto label1;
   }
   label1: while(0);
@@ -49207,7 +34601,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 = 8706;
+  fra.me.line = 6524;
   fra.me.meth = LOCATE_parser_prod___ATrueExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49215,121 +34609,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8708 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8708);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ATrueExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8711;
-  fra.me.meth = LOCATE_parser_prod___ATrueExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8713 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwtrue");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8713);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwtrue", LOCATE_parser_prod, 6526);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ATrueExpr___empty_init(val_t p0, int* init_table){
-  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+void parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
+  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos211]) 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 = 8681;
-  fra.me.meth = LOCATE_parser_prod___ATrueExpr___empty_init;
+  fra.me.line = 6530;
+  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;
-  /* ./parser//parser_prod.nit:8681 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
+  init_table[itpos225] = 1;
   return;
 }
-void parser_prod___ATrueExpr___init_atrueexpr(val_t p0, val_t p1, int* init_table){
-  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ATrueExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos212]) 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 = 8683;
-  fra.me.meth = LOCATE_parser_prod___ATrueExpr___init_atrueexpr;
+  fra.me.line = 6532;
+  fra.me.meth = LOCATE_parser_prod___AFalseExpr___init_afalseexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8687 */
-  CALL_parser_prod___ATrueExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6536 */
+  CALL_parser_prod___AFalseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6537 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8688 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8688);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6537);
   }
-  ATTR_parser_nodes___ATrueExpr____n_kwtrue(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6538 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8689 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8689);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6538);
   }
   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[itpos212] = 1;
-  return;
-}
-void parser_prod___AFalseExpr___n_kwfalse__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8717;
-  fra.me.meth = LOCATE_parser_prod___AFalseExpr___n_kwfalse__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8719 */
-  ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8720 */
-  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;
   return;
 }
 void parser_prod___AFalseExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49339,7 +34679,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 = 8734;
+  fra.me.line = 6541;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49350,13 +34690,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8736 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8736);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser_prod, 6543);
   }
   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]));
@@ -49366,8 +34704,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8737 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -49381,31 +34719,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8738 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8738);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6545);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6546 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwfalse, ID_TKwfalse)) /*cast TKwfalse*/;
-      /* ./parser//parser_prod.nit:8739 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8739);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6546);
       }
-      /* ./parser//parser_prod.nit:8740 */
+      /* ./parser//parser_prod.nit:6547 */
       ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8742 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8742);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6549 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6549);
     }
-    /* ./parser//parser_prod.nit:8744 */
+    /* ./parser//parser_prod.nit:6551 */
     goto label1;
   }
   label1: while(0);
@@ -49418,7 +34750,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 = 8748;
+  fra.me.line = 6555;
   fra.me.meth = LOCATE_parser_prod___AFalseExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49426,121 +34758,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8750 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8750);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AFalseExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8753;
-  fra.me.meth = LOCATE_parser_prod___AFalseExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8755 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwfalse");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8755);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwfalse", LOCATE_parser_prod, 6557);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AFalseExpr___empty_init(val_t p0, int* init_table){
-  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+void parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
+  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos213]) 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 = 8723;
-  fra.me.meth = LOCATE_parser_prod___AFalseExpr___empty_init;
+  fra.me.line = 6561;
+  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;
-  /* ./parser//parser_prod.nit:8723 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
+  init_table[itpos227] = 1;
   return;
 }
-void parser_prod___AFalseExpr___init_afalseexpr(val_t p0, val_t p1, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFalseExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos214]) 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 = 8725;
-  fra.me.meth = LOCATE_parser_prod___AFalseExpr___init_afalseexpr;
+  fra.me.line = 6563;
+  fra.me.meth = LOCATE_parser_prod___ANullExpr___init_anullexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8729 */
-  CALL_parser_prod___AFalseExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6567 */
+  CALL_parser_prod___ANullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6568 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8730 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8730);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6568);
   }
-  ATTR_parser_nodes___AFalseExpr____n_kwfalse(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6569 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8731 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8731);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6569);
   }
   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[itpos214] = 1;
-  return;
-}
-void parser_prod___ANullExpr___n_kwnull__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8759;
-  fra.me.meth = LOCATE_parser_prod___ANullExpr___n_kwnull__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8761 */
-  ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8762 */
-  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;
   return;
 }
 void parser_prod___ANullExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49550,7 +34828,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 = 8776;
+  fra.me.line = 6572;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49561,13 +34839,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8778 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8778);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 6574);
   }
   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]));
@@ -49577,8 +34853,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8779 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -49592,31 +34868,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8780 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8780);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6576);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6577 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
-      /* ./parser//parser_prod.nit:8781 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8781);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6577);
       }
-      /* ./parser//parser_prod.nit:8782 */
+      /* ./parser//parser_prod.nit:6578 */
       ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8784 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8784);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6580 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6580);
     }
-    /* ./parser//parser_prod.nit:8786 */
+    /* ./parser//parser_prod.nit:6582 */
     goto label1;
   }
   label1: while(0);
@@ -49629,7 +34899,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 = 8790;
+  fra.me.line = 6586;
   fra.me.meth = LOCATE_parser_prod___ANullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49637,121 +34907,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8792 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8792);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 6588);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ANullExpr___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
+  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 6592;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  if (init_table[itpos230]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8795;
-  fra.me.meth = LOCATE_parser_prod___ANullExpr___visit_all_reverse;
+  fra.me.line = 6594;
+  fra.me.meth = LOCATE_parser_prod___AIntExpr___init_aintexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8797 */
+  /* ./parser//parser_prod.nit:6598 */
+  CALL_parser_prod___AIntExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6599 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8797);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6599);
   }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ANullExpr___empty_init(val_t p0, int* init_table){
-  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ANullExpr].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  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 = 8765;
-  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;
-  /* ./parser//parser_prod.nit:8765 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
-  return;
-}
-void parser_prod___ANullExpr___init_anullexpr(val_t p0, val_t p1, int* init_table){
-  int itpos216 = 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[itpos216]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8767;
-  fra.me.meth = LOCATE_parser_prod___ANullExpr___init_anullexpr;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8771 */
-  CALL_parser_prod___ANullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8772 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8772);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ANullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8773 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8773);
-    nit_exit(1);
-  }
-  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[itpos216] = 1;
-  return;
-}
-void parser_prod___AIntExpr___n_number__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8801;
-  fra.me.meth = LOCATE_parser_prod___AIntExpr___n_number__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8803 */
-  ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8804 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6600 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6600);
+  }
+  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;
   return;
 }
 void parser_prod___AIntExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49761,7 +34977,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 = 8818;
+  fra.me.line = 6603;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49772,13 +34988,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8820 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8820);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser_prod, 6605);
   }
   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]));
@@ -49788,8 +35002,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8821 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -49803,31 +35017,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8822 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8822);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6607);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6608 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TNumber, ID_TNumber)) /*cast TNumber*/;
-      /* ./parser//parser_prod.nit:8823 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8823);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6608);
       }
-      /* ./parser//parser_prod.nit:8824 */
+      /* ./parser//parser_prod.nit:6609 */
       ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8826 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8826);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6611 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6611);
     }
-    /* ./parser//parser_prod.nit:8828 */
+    /* ./parser//parser_prod.nit:6613 */
     goto label1;
   }
   label1: while(0);
@@ -49840,7 +35048,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 = 8832;
+  fra.me.line = 6617;
   fra.me.meth = LOCATE_parser_prod___AIntExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -49848,121 +35056,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8834 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8834);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIntExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8837;
-  fra.me.meth = LOCATE_parser_prod___AIntExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8839 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_number");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8839);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_number", LOCATE_parser_prod, 6619);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIntExpr___empty_init(val_t p0, int* init_table){
-  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+void parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
+  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos217]) 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 = 8807;
-  fra.me.meth = LOCATE_parser_prod___AIntExpr___empty_init;
+  fra.me.line = 6623;
+  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;
-  /* ./parser//parser_prod.nit:8807 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
+  init_table[itpos231] = 1;
   return;
 }
-void parser_prod___AIntExpr___init_aintexpr(val_t p0, val_t p1, int* init_table){
-  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIntExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos218]) 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 = 8809;
-  fra.me.meth = LOCATE_parser_prod___AIntExpr___init_aintexpr;
+  fra.me.line = 6625;
+  fra.me.meth = LOCATE_parser_prod___AFloatExpr___init_afloatexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8813 */
-  CALL_parser_prod___AIntExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6629 */
+  CALL_parser_prod___AFloatExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6630 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8814 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8814);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6630);
   }
-  ATTR_parser_nodes___AIntExpr____n_number(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6631 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8815 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8815);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6631);
   }
   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[itpos218] = 1;
-  return;
-}
-void parser_prod___AFloatExpr___n_float__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8843;
-  fra.me.meth = LOCATE_parser_prod___AFloatExpr___n_float__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8845 */
-  ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8846 */
-  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;
   return;
 }
 void parser_prod___AFloatExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -49972,7 +35126,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 = 8860;
+  fra.me.line = 6634;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -49983,13 +35137,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8862 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8862);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser_prod, 6636);
   }
   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]));
@@ -49999,8 +35151,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8863 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -50014,31 +35166,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8864 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8864);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6638);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6639 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TFloat, ID_TFloat)) /*cast TFloat*/;
-      /* ./parser//parser_prod.nit:8865 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8865);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6639);
       }
-      /* ./parser//parser_prod.nit:8866 */
+      /* ./parser//parser_prod.nit:6640 */
       ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8868 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8868);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6642 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6642);
     }
-    /* ./parser//parser_prod.nit:8870 */
+    /* ./parser//parser_prod.nit:6644 */
     goto label1;
   }
   label1: while(0);
@@ -50051,7 +35197,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 = 8874;
+  fra.me.line = 6648;
   fra.me.meth = LOCATE_parser_prod___AFloatExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50059,121 +35205,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8876 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8876);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_float", LOCATE_parser_prod, 6650);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AFloatExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8879;
-  fra.me.meth = LOCATE_parser_prod___AFloatExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8881 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_float");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8881);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AFloatExpr___empty_init(val_t p0, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+void parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
+  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos219]) 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 = 8849;
-  fra.me.meth = LOCATE_parser_prod___AFloatExpr___empty_init;
+  fra.me.line = 6654;
+  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;
-  /* ./parser//parser_prod.nit:8849 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
+  init_table[itpos233] = 1;
   return;
 }
-void parser_prod___AFloatExpr___init_afloatexpr(val_t p0, val_t p1, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFloatExpr].i;
+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;
   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[itpos234]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8851;
-  fra.me.meth = LOCATE_parser_prod___AFloatExpr___init_afloatexpr;
+  fra.me.line = 6656;
+  fra.me.meth = LOCATE_parser_prod___ACharExpr___init_acharexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8855 */
-  CALL_parser_prod___AFloatExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6660 */
+  CALL_parser_prod___ACharExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6661 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8856 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8856);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6661);
   }
-  ATTR_parser_nodes___AFloatExpr____n_float(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6662 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8857 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8857);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6662);
   }
   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;
-  return;
-}
-void parser_prod___ACharExpr___n_char__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8885;
-  fra.me.meth = LOCATE_parser_prod___ACharExpr___n_char__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8887 */
-  ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8888 */
-  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;
   return;
 }
 void parser_prod___ACharExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -50183,7 +35275,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 = 8902;
+  fra.me.line = 6665;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50194,13 +35286,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8904 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8904);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser_prod, 6667);
   }
   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]));
@@ -50210,8 +35300,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8905 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -50225,31 +35315,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8906 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8906);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6669);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6670 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TChar, ID_TChar)) /*cast TChar*/;
-      /* ./parser//parser_prod.nit:8907 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8907);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6670);
       }
-      /* ./parser//parser_prod.nit:8908 */
+      /* ./parser//parser_prod.nit:6671 */
       ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8910 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8910);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6673 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6673);
     }
-    /* ./parser//parser_prod.nit:8912 */
+    /* ./parser//parser_prod.nit:6675 */
     goto label1;
   }
   label1: while(0);
@@ -50262,7 +35346,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 = 8916;
+  fra.me.line = 6679;
   fra.me.meth = LOCATE_parser_prod___ACharExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50270,121 +35354,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8918 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8918);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_char", LOCATE_parser_prod, 6681);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ACharExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8921;
-  fra.me.meth = LOCATE_parser_prod___ACharExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8923 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_char");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8923);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ACharExpr___empty_init(val_t p0, int* init_table){
-  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+void parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos221]) 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 = 8891;
-  fra.me.meth = LOCATE_parser_prod___ACharExpr___empty_init;
+  fra.me.line = 6685;
+  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;
-  /* ./parser//parser_prod.nit:8891 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos221] = 1;
+  init_table[itpos235] = 1;
   return;
 }
-void parser_prod___ACharExpr___init_acharexpr(val_t p0, val_t p1, int* init_table){
-  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACharExpr].i;
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos222]) 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 = 8893;
-  fra.me.meth = LOCATE_parser_prod___ACharExpr___init_acharexpr;
+  fra.me.line = 6687;
+  fra.me.meth = LOCATE_parser_prod___AStringExpr___init_astringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8897 */
-  CALL_parser_prod___ACharExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6691 */
+  CALL_parser_prod___AStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6692 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8898 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8898);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6692);
   }
-  ATTR_parser_nodes___ACharExpr____n_char(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6693 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8899 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8899);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6693);
   }
   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[itpos222] = 1;
-  return;
-}
-void parser_prod___AStringExpr___n_string__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8927;
-  fra.me.meth = LOCATE_parser_prod___AStringExpr___n_string__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8929 */
-  ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8930 */
-  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;
   return;
 }
 void parser_prod___AStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -50394,7 +35424,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 = 8944;
+  fra.me.line = 6696;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50405,13 +35435,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8946 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8946);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6698);
   }
   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]));
@@ -50421,8 +35449,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8947 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -50436,31 +35464,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8948 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8948);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6700);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6701 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TString, ID_TString)) /*cast TString*/;
-      /* ./parser//parser_prod.nit:8949 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8949);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6701);
       }
-      /* ./parser//parser_prod.nit:8950 */
+      /* ./parser//parser_prod.nit:6702 */
       ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8952 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8952);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6704 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6704);
     }
-    /* ./parser//parser_prod.nit:8954 */
+    /* ./parser//parser_prod.nit:6706 */
     goto label1;
   }
   label1: while(0);
@@ -50473,7 +35495,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 = 8958;
+  fra.me.line = 6710;
   fra.me.meth = LOCATE_parser_prod___AStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50481,121 +35503,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8960 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8960);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStringExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8963;
-  fra.me.meth = LOCATE_parser_prod___AStringExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8965 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8965);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6712);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+void parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos223]) 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 = 8933;
-  fra.me.meth = LOCATE_parser_prod___AStringExpr___empty_init;
+  fra.me.line = 6716;
+  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;
-  /* ./parser//parser_prod.nit:8933 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
+  init_table[itpos237] = 1;
   return;
 }
-void parser_prod___AStringExpr___init_astringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStringExpr].i;
+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;
   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[itpos238]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8935;
-  fra.me.meth = LOCATE_parser_prod___AStringExpr___init_astringexpr;
+  fra.me.line = 6718;
+  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___init_astartstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8939 */
-  CALL_parser_prod___AStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6722 */
+  CALL_parser_prod___AStartStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6723 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8940 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8940);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6723);
   }
-  ATTR_parser_nodes___AStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6724 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8941 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8941);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6724);
   }
   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;
-  return;
-}
-void parser_prod___AStartStringExpr___n_string__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8969;
-  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___n_string__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8971 */
-  ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:8972 */
-  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;
   return;
 }
 void parser_prod___AStartStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -50605,7 +35573,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 = 8986;
+  fra.me.line = 6727;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50616,13 +35584,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8988 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8988);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6729);
   }
   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]));
@@ -50632,8 +35598,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:8989 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -50647,31 +35613,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:8990 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8990);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6731);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6732 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TStartString, ID_TStartString)) /*cast TStartString*/;
-      /* ./parser//parser_prod.nit:8991 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8991);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6732);
       }
-      /* ./parser//parser_prod.nit:8992 */
+      /* ./parser//parser_prod.nit:6733 */
       ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:8994 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8994);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6735 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6735);
     }
-    /* ./parser//parser_prod.nit:8996 */
+    /* ./parser//parser_prod.nit:6737 */
     goto label1;
   }
   label1: while(0);
@@ -50684,7 +35644,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 = 9000;
+  fra.me.line = 6741;
   fra.me.meth = LOCATE_parser_prod___AStartStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50692,121 +35652,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9002 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9002);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6743);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AStartStringExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9005;
-  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9007 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9007);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AStartStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+void parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos225]) 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 = 8975;
-  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___empty_init;
+  fra.me.line = 6747;
+  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;
-  /* ./parser//parser_prod.nit:8975 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
+  init_table[itpos239] = 1;
   return;
 }
-void parser_prod___AStartStringExpr___init_astartstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AStartStringExpr].i;
+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;
   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[itpos240]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 8977;
-  fra.me.meth = LOCATE_parser_prod___AStartStringExpr___init_astartstringexpr;
+  fra.me.line = 6749;
+  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___init_amidstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:8981 */
-  CALL_parser_prod___AStartStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6753 */
+  CALL_parser_prod___AMidStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6754 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:8982 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8982);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6754);
   }
-  ATTR_parser_nodes___AStartStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6755 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:8983 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 8983);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6755);
   }
   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;
-  return;
-}
-void parser_prod___AMidStringExpr___n_string__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9011;
-  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___n_string__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9013 */
-  ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9014 */
-  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;
   return;
 }
 void parser_prod___AMidStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -50816,7 +35722,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 = 9028;
+  fra.me.line = 6758;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -50827,13 +35733,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9030 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9030);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6760);
   }
   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]));
@@ -50843,8 +35747,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9031 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -50858,31 +35762,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9032 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9032);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6762);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6763 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMidString, ID_TMidString)) /*cast TMidString*/;
-      /* ./parser//parser_prod.nit:9033 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9033);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6763);
       }
-      /* ./parser//parser_prod.nit:9034 */
+      /* ./parser//parser_prod.nit:6764 */
       ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9036 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9036);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6766 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6766);
     }
-    /* ./parser//parser_prod.nit:9038 */
+    /* ./parser//parser_prod.nit:6768 */
     goto label1;
   }
   label1: while(0);
@@ -50895,7 +35793,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 = 9042;
+  fra.me.line = 6772;
   fra.me.meth = LOCATE_parser_prod___AMidStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -50903,121 +35801,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9044 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9044);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMidStringExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9047;
-  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9049 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9049);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6774);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AMidStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+void parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_table){
+  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos227]) 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 = 9017;
-  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___empty_init;
+  fra.me.line = 6778;
+  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;
-  /* ./parser//parser_prod.nit:9017 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
+  init_table[itpos241] = 1;
   return;
 }
-void parser_prod___AMidStringExpr___init_amidstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMidStringExpr].i;
+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;
   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[itpos242]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9019;
-  fra.me.meth = LOCATE_parser_prod___AMidStringExpr___init_amidstringexpr;
+  fra.me.line = 6780;
+  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___init_aendstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9023 */
-  CALL_parser_prod___AMidStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6784 */
+  CALL_parser_prod___AEndStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6785 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9024 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9024);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6785);
   }
-  ATTR_parser_nodes___AMidStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6786 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9025 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9025);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6786);
   }
   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;
-  return;
-}
-void parser_prod___AEndStringExpr___n_string__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9053;
-  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___n_string__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9055 */
-  ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9056 */
-  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;
   return;
 }
 void parser_prod___AEndStringExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -51027,7 +35871,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 = 9070;
+  fra.me.line = 6789;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51038,13 +35882,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9072 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9072);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6791);
   }
   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]));
@@ -51054,8 +35896,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9073 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -51069,31 +35911,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9074 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9074);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6793);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6794 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TEndString, ID_TEndString)) /*cast TEndString*/;
-      /* ./parser//parser_prod.nit:9075 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9075);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6794);
       }
-      /* ./parser//parser_prod.nit:9076 */
+      /* ./parser//parser_prod.nit:6795 */
       ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9078 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9078);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6797 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6797);
     }
-    /* ./parser//parser_prod.nit:9080 */
+    /* ./parser//parser_prod.nit:6799 */
     goto label1;
   }
   label1: while(0);
@@ -51106,7 +35942,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 = 9084;
+  fra.me.line = 6803;
   fra.me.meth = LOCATE_parser_prod___AEndStringExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51114,224 +35950,210 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9086 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9086);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AEndStringExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9089;
-  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9091 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_string");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9091);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_string", LOCATE_parser_prod, 6805);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AEndStringExpr___empty_init(val_t p0, int* init_table){
-  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+void parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table){
+  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos229]) 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 = 9059;
-  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___empty_init;
+  fra.me.line = 6809;
+  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;
-  /* ./parser//parser_prod.nit:9059 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
+  init_table[itpos243] = 1;
   return;
 }
-void parser_prod___AEndStringExpr___init_aendstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AEndStringExpr].i;
+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;
   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[itpos244]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9061;
-  fra.me.meth = LOCATE_parser_prod___AEndStringExpr___init_aendstringexpr;
+  fra.me.line = 6811;
+  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9065 */
-  CALL_parser_prod___AEndStringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9066 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9066);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AEndStringExpr____n_string(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9067 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9067);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6815 */
+  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[itpos230] = 1;
+  init_table[itpos244] = 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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:6816 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6817 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:6818 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9110;
+  fra.me.line = 6823;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:6825 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9112 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9112);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6825);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9113 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9113);
-        nit_exit(1);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:6825 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:6826 */
+      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);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:9114 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:6827 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-          /* ./parser//parser_prod.nit:9115 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:6828 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9115);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6828);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9116 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6829 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9116);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6829);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:9117 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9117);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6830);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9119 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:6832 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9119);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6832);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:9121 */
+        /* ./parser//parser_prod.nit:6834 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:9112 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -51339,195 +36161,100 @@ void parser_prod___ASuperstringExpr___replace_child(val_t p0, val_t p1, val_t p2
   return;
 }
 void parser_prod___ASuperstringExpr___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9126;
+  fra.me.line = 6839;
   fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   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:6841 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9128 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9128);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_exprs", LOCATE_parser_prod, 6841);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:9129 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:9128 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(fra.me.REG[0]);
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___visit_all_reverse(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 = 9133;
-  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9136 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9136);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:9137 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:9137 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9138 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9138);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:9139 */
-    } else {
-      /* ./parser//parser_prod.nit:9137 */
-      goto label1;
-    }
+  CALL_abstract_collection___Collection___iterate(fra.me.REG[0])(fra.me.REG[0], (&(fra.me)), ((fun_t)OC_parser_prod___ASuperstringExpr___visit_all_1));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ASuperstringExpr___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:6842 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ASuperstringExpr___empty_init(val_t p0, int* init_table){
-  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
+void parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
+  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos231]) 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 = 9096;
-  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___empty_init;
+  fra.me.line = 6847;
+  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;
-  /* ./parser//parser_prod.nit:9096 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
-  return;
-}
-void parser_prod___ASuperstringExpr___init_asuperstringexpr(val_t p0, val_t p1, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperstringExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos232]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9098;
-  fra.me.meth = LOCATE_parser_prod___ASuperstringExpr___init_asuperstringexpr;
-  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;
-  /* ./parser//parser_prod.nit:9102 */
-  CALL_parser_prod___ASuperstringExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:9103 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9104 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9104);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9105 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_exprs");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9105);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___ASuperstringExpr____n_exprs(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:9106 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:9103 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
+  init_table[itpos245] = 1;
   return;
 }
-void parser_prod___AParExpr___n_expr__eq(val_t p0, val_t p1){
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
+  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 = 9145;
-  fra.me.meth = LOCATE_parser_prod___AParExpr___n_expr__eq;
+  fra.me.line = 6849;
+  fra.me.meth = LOCATE_parser_prod___AParExpr___init_aparexpr;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9147 */
+  /* ./parser//parser_prod.nit:6853 */
+  CALL_parser_prod___AParExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6854 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6854);
+  }
   ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9148 */
+  /* ./parser//parser_prod.nit:6855 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6855);
+  }
   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;
   return;
 }
 void parser_prod___AParExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -51537,7 +36264,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 = 9162;
+  fra.me.line = 6858;
   fra.me.meth = LOCATE_parser_prod___AParExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51548,13 +36275,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9164 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9164);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6860);
   }
   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]));
@@ -51564,8 +36289,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9165 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -51579,31 +36304,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9166 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9166);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6862);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6863 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9167 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9167);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6863);
       }
-      /* ./parser//parser_prod.nit:9168 */
+      /* ./parser//parser_prod.nit:6864 */
       ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9170 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9170);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6866 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6866);
     }
-    /* ./parser//parser_prod.nit:9172 */
+    /* ./parser//parser_prod.nit:6868 */
     goto label1;
   }
   label1: while(0);
@@ -51616,7 +36335,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 = 9176;
+  fra.me.line = 6872;
   fra.me.meth = LOCATE_parser_prod___AParExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -51624,161 +36343,97 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9178 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9178);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AParExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9181;
-  fra.me.meth = LOCATE_parser_prod___AParExpr___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9183 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9183);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6874);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AParExpr___empty_init(val_t p0, int* init_table){
-  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
+void parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
+  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos233]) 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 = 9151;
-  fra.me.meth = LOCATE_parser_prod___AParExpr___empty_init;
+  fra.me.line = 6878;
+  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;
-  /* ./parser//parser_prod.nit:9151 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
+  init_table[itpos247] = 1;
   return;
 }
-void parser_prod___AParExpr___init_aparexpr(val_t p0, val_t p1, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AParExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos234]) 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 = 9153;
-  fra.me.meth = LOCATE_parser_prod___AParExpr___init_aparexpr;
+  fra.me.line = 6880;
+  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___init_aascastexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  /* ./parser//parser_prod.nit:9157 */
-  CALL_parser_prod___AParExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:6886 */
+  CALL_parser_prod___AAsCastExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6887 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9158 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9158);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6887);
   }
-  ATTR_parser_nodes___AProxyExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6888 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9159 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9159);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6888);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6889 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6889);
+  }
+  ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6890 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6890);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6891 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6891);
+  }
+  ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:6892 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6892);
+  }
+  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[itpos234] = 1;
-  return;
-}
-void parser_prod___AAsCastExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9187;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9189 */
-  ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9190 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___n_kwas__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9192;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_kwas__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9194 */
-  ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9195 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___n_type__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9197;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___n_type__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9199 */
-  ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9200 */
-  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[itpos248] = 1;
   return;
 }
 void parser_prod___AAsCastExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -51788,7 +36443,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 = 9220;
+  fra.me.line = 6895;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -51799,13 +36454,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9222 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9222);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6897);
   }
   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]));
@@ -51815,8 +36468,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9223 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -51830,40 +36483,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9224 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9224);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6899);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6900 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9225 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9225);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6900);
       }
-      /* ./parser//parser_prod.nit:9226 */
+      /* ./parser//parser_prod.nit:6901 */
       ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9228 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9228);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6903 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6903);
     }
-    /* ./parser//parser_prod.nit:9230 */
+    /* ./parser//parser_prod.nit:6905 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6907 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9232 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9232);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 6907);
   }
   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]));
@@ -51873,8 +36518,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9233 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -51888,40 +36533,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9234 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9234);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6909);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6910 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
-      /* ./parser//parser_prod.nit:9235 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9235);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6910);
       }
-      /* ./parser//parser_prod.nit:9236 */
+      /* ./parser//parser_prod.nit:6911 */
       ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9238 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9238);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6913 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6913);
     }
-    /* ./parser//parser_prod.nit:9240 */
+    /* ./parser//parser_prod.nit:6915 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6917 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9242 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9242);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 6917);
   }
   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]));
@@ -51931,8 +36568,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9243 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -51946,31 +36583,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9244 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9244);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6919);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6920 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
-      /* ./parser//parser_prod.nit:9245 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9245);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6920);
       }
-      /* ./parser//parser_prod.nit:9246 */
+      /* ./parser//parser_prod.nit:6921 */
       ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9248 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9248);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6923 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6923);
     }
-    /* ./parser//parser_prod.nit:9250 */
+    /* ./parser//parser_prod.nit:6925 */
     goto label1;
   }
   label1: while(0);
@@ -51983,7 +36614,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 = 9254;
+  fra.me.line = 6929;
   fra.me.meth = LOCATE_parser_prod___AAsCastExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -51992,287 +36623,153 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9256 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9256);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9257 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9257);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9258 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9258);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsCastExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9261;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9263 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9263);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6931);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9264 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9264);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 6932);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9265 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_type");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9265);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 6933);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAsCastExpr___empty_init(val_t p0, int* init_table){
-  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
+void parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
+  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos235]) 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 = 9203;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___empty_init;
+  fra.me.line = 6937;
+  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;
-  /* ./parser//parser_prod.nit:9203 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 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 itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsCastExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos236]) 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 = 9205;
-  fra.me.meth = LOCATE_parser_prod___AAsCastExpr___init_aascastexpr;
+  fra.me.line = 6939;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:9211 */
-  CALL_parser_prod___AAsCastExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:6946 */
+  CALL_parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:6947 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9212 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9212);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6947);
   }
-  ATTR_parser_nodes___AAsCastExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:6948 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9213 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9213);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6948);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6949 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9214 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9214);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6949);
   }
-  ATTR_parser_nodes___AAsCastExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:6950 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9215 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9215);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6950);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6951 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9216 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9216);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6951);
   }
-  ATTR_parser_nodes___AAsCastExpr____n_type(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:6952 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9217 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9217);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6952);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:6953 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 6953);
+  }
+  ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:6954 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6954);
+  }
+  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[itpos236] = 1;
-  return;
-}
-void parser_prod___AAsNotnullExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9269;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9271 */
-  ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9272 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsNotnullExpr___n_kwas__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9274;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwas__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9276 */
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9277 */
-  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[itpos250] = 1;
   return;
 }
-void parser_prod___AAsNotnullExpr___n_kwnot__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  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 = 9279;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwnot__eq;
+  fra.me.line = 6957;
+  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9281 */
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9282 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsNotnullExpr___n_kwnull__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9284;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___n_kwnull__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9286 */
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9287 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsNotnullExpr___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 9310;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___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[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:6959 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9312 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9312);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 6959);
   }
   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]));
@@ -52282,8 +36779,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9313 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52297,40 +36794,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9314 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9314);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6961);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6962 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9315 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9315);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6962);
       }
-      /* ./parser//parser_prod.nit:9316 */
+      /* ./parser//parser_prod.nit:6963 */
       ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9318 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9318);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6965 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6965);
     }
-    /* ./parser//parser_prod.nit:9320 */
+    /* ./parser//parser_prod.nit:6967 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6969 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9322 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9322);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 6969);
   }
   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]));
@@ -52340,8 +36829,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9323 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52355,40 +36844,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9324 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9324);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6971);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6972 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
-      /* ./parser//parser_prod.nit:9325 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9325);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6972);
       }
-      /* ./parser//parser_prod.nit:9326 */
+      /* ./parser//parser_prod.nit:6973 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9328 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9328);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6975 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6975);
     }
-    /* ./parser//parser_prod.nit:9330 */
+    /* ./parser//parser_prod.nit:6977 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6979 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9332 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9332);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 6979);
   }
   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]));
@@ -52398,8 +36879,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9333 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52413,40 +36894,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9334 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9334);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6981);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6982 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnot, ID_TKwnot)) /*cast TKwnot*/;
-      /* ./parser//parser_prod.nit:9335 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9335);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6982);
       }
-      /* ./parser//parser_prod.nit:9336 */
+      /* ./parser//parser_prod.nit:6983 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9338 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9338);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6985 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6985);
     }
-    /* ./parser//parser_prod.nit:9340 */
+    /* ./parser//parser_prod.nit:6987 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:6989 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9342 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9342);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 6989);
   }
   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]));
@@ -52456,8 +36929,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9343 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52471,31 +36944,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9344 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9344);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 6991);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:6992 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwnull, ID_TKwnull)) /*cast TKwnull*/;
-      /* ./parser//parser_prod.nit:9345 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9345);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 6992);
       }
-      /* ./parser//parser_prod.nit:9346 */
+      /* ./parser//parser_prod.nit:6993 */
       ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9348 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9348);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:6995 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 6995);
     }
-    /* ./parser//parser_prod.nit:9350 */
+    /* ./parser//parser_prod.nit:6997 */
     goto label1;
   }
   label1: while(0);
@@ -52508,7 +36975,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 = 9354;
+  fra.me.line = 7001;
   fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -52517,279 +36984,121 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9356 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9356);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7003);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9357 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9357);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9358 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9358);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9359 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9359);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AAsNotnullExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9362;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9364 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9364);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9365 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwas");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9365);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7004);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9366 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnot");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9366);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnot", LOCATE_parser_prod, 7005);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9367 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwnull");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9367);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnull", LOCATE_parser_prod, 7006);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AAsNotnullExpr___empty_init(val_t p0, int* init_table){
-  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
+void parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
+  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos237]) 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 = 9290;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___empty_init;
+  fra.me.line = 7010;
+  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;
-  /* ./parser//parser_prod.nit:9290 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 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 itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotnullExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos238]) 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 = 9292;
-  fra.me.meth = LOCATE_parser_prod___AAsNotnullExpr___init_aasnotnullexpr;
+  fra.me.line = 7012;
+  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___init_aissetattrexpr;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
   fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  /* ./parser//parser_prod.nit:9299 */
-  CALL_parser_prod___AAsNotnullExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7018 */
+  CALL_parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7019 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9300 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9300);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7019);
   }
-  ATTR_parser_nodes___AAsNotnullExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7020 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9301 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9301);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7020);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7021 */
   REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9302 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9302);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7021);
   }
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7022 */
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9303 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9303);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7022);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7023 */
   REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9304 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9304);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7023);
   }
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
+  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:7024 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9305 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9305);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7024);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9306 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9306);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAsNotnullExpr____n_kwnull(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9307 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9307);
-    nit_exit(1);
-  }
-  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[itpos238] = 1;
-  return;
-}
-void parser_prod___AIssetAttrExpr___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9376;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9378 */
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9379 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIssetAttrExpr___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9381;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9383 */
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9384 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIssetAttrExpr___n_kwisset__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9371;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___n_kwisset__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9373 */
-  ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9374 */
-  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[itpos252] = 1;
   return;
 }
 void parser_prod___AIssetAttrExpr___replace_child(val_t p0, val_t p1, val_t p2){
@@ -52799,7 +37108,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 = 9404;
+  fra.me.line = 7027;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -52810,13 +37119,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9406 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9406);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser_prod, 7029);
   }
   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]));
@@ -52826,8 +37133,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9407 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52841,40 +37148,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9408 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9408);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7031);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7032 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwisset, ID_TKwisset)) /*cast TKwisset*/;
-      /* ./parser//parser_prod.nit:9409 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9409);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7032);
       }
-      /* ./parser//parser_prod.nit:9410 */
+      /* ./parser//parser_prod.nit:7033 */
       ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9412 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9412);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7035 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7035);
     }
-    /* ./parser//parser_prod.nit:9414 */
+    /* ./parser//parser_prod.nit:7037 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7039 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9416 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9416);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7039);
   }
   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]));
@@ -52884,8 +37183,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9417 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52899,40 +37198,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9418 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9418);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7041);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7042 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9419 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9419);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7042);
       }
-      /* ./parser//parser_prod.nit:9420 */
+      /* ./parser//parser_prod.nit:7043 */
       ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9422 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9422);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7045 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7045);
     }
-    /* ./parser//parser_prod.nit:9424 */
+    /* ./parser//parser_prod.nit:7047 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7049 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9426 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9426);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7049);
   }
   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]));
@@ -52942,8 +37233,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9427 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -52957,31 +37248,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9428 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9428);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7051);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7052 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TAttrid, ID_TAttrid)) /*cast TAttrid*/;
-      /* ./parser//parser_prod.nit:9429 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9429);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7052);
       }
-      /* ./parser//parser_prod.nit:9430 */
+      /* ./parser//parser_prod.nit:7053 */
       ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9432 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9432);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7055 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7055);
     }
-    /* ./parser//parser_prod.nit:9434 */
+    /* ./parser//parser_prod.nit:7057 */
     goto label1;
   }
   label1: while(0);
@@ -52994,7 +37279,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 = 9438;
+  fra.me.line = 7061;
   fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -53003,200 +37288,83 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9440 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9440);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9441 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9441);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9442 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9442);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AIssetAttrExpr___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9445;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9447 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwisset");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9447);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwisset", LOCATE_parser_prod, 7063);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9448 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_expr");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9448);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_expr", LOCATE_parser_prod, 7064);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9449 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9449);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7065);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AIssetAttrExpr___empty_init(val_t p0, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
+void parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table){
+  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos239]) 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 = 9387;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___empty_init;
+  fra.me.line = 7069;
+  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;
-  /* ./parser//parser_prod.nit:9387 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 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 itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AIssetAttrExpr].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+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;
+  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[itpos254]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9389;
-  fra.me.meth = LOCATE_parser_prod___AIssetAttrExpr___init_aissetattrexpr;
+  fra.me.line = 7071;
+  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___init_aplusassignop;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 2;
   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;
-  fra.me.REG[3] = p3;
-  /* ./parser//parser_prod.nit:9395 */
-  CALL_parser_prod___AIssetAttrExpr___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7075 */
+  CALL_parser_prod___APlusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7076 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9396 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9396);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7076);
   }
-  ATTR_parser_nodes___AIssetAttrExpr____n_kwisset(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7077 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9397 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9397);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7077);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9398 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9398);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAttrFormExpr____n_expr(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9399 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9399);
-    nit_exit(1);
-  }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9400 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9400);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___AAttrFormExpr____n_id(fra.me.REG[0]) = fra.me.REG[3];
-  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9401 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9401);
-    nit_exit(1);
-  }
-  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[itpos240] = 1;
-  return;
-}
-void parser_prod___APlusAssignOp___n_pluseq__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9453;
-  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___n_pluseq__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9455 */
-  ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9456 */
-  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;
   return;
 }
 void parser_prod___APlusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
@@ -53206,7 +37374,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 = 9470;
+  fra.me.line = 7080;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -53217,13 +37385,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9472 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9472);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser_prod, 7082);
   }
   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]));
@@ -53233,8 +37399,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9473 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -53248,31 +37414,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9474 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9474);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7084);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7085 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TPluseq, ID_TPluseq)) /*cast TPluseq*/;
-      /* ./parser//parser_prod.nit:9475 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9475);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7085);
       }
-      /* ./parser//parser_prod.nit:9476 */
+      /* ./parser//parser_prod.nit:7086 */
       ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9478 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9478);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7088 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7088);
     }
-    /* ./parser//parser_prod.nit:9480 */
+    /* ./parser//parser_prod.nit:7090 */
     goto label1;
   }
   label1: while(0);
@@ -53285,7 +37445,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 = 9484;
+  fra.me.line = 7094;
   fra.me.meth = LOCATE_parser_prod___APlusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -53293,121 +37453,67 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9486 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9486);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_pluseq", LOCATE_parser_prod, 7096);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___APlusAssignOp___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9489;
-  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9491 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_pluseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9491);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___APlusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+void parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_table){
+  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos241]) 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 = 9459;
-  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___empty_init;
+  fra.me.line = 7100;
+  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;
-  /* ./parser//parser_prod.nit:9459 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
+  init_table[itpos255] = 1;
   return;
 }
-void parser_prod___APlusAssignOp___init_aplusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_APlusAssignOp].i;
+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;
   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[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9461;
-  fra.me.meth = LOCATE_parser_prod___APlusAssignOp___init_aplusassignop;
+  fra.me.line = 7102;
+  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___init_aminusassignop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9465 */
-  CALL_parser_prod___APlusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7106 */
+  CALL_parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7107 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9466 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9466);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7107);
   }
-  ATTR_parser_nodes___APlusAssignOp____n_pluseq(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7108 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9467 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9467);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7108);
   }
   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;
-  return;
-}
-void parser_prod___AMinusAssignOp___n_minuseq__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9495;
-  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___n_minuseq__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9497 */
-  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9498 */
-  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;
   return;
 }
 void parser_prod___AMinusAssignOp___replace_child(val_t p0, val_t p1, val_t p2){
@@ -53417,7 +37523,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 = 9512;
+  fra.me.line = 7111;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -53428,13 +37534,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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9514 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9514);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser_prod, 7113);
   }
   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]));
@@ -53444,8 +37548,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9515 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -53459,31 +37563,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9516 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9516);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7115);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7116 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TMinuseq, ID_TMinuseq)) /*cast TMinuseq*/;
-      /* ./parser//parser_prod.nit:9517 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9517);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7116);
       }
-      /* ./parser//parser_prod.nit:9518 */
+      /* ./parser//parser_prod.nit:7117 */
       ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9520 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9520);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7119 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7119);
     }
-    /* ./parser//parser_prod.nit:9522 */
+    /* ./parser//parser_prod.nit:7121 */
     goto label1;
   }
   label1: while(0);
@@ -53496,7 +37594,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 = 9526;
+  fra.me.line = 7125;
   fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
@@ -53504,302 +37602,229 @@ 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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9528 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9528);
-    nit_exit(1);
-  }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AMinusAssignOp___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9531;
-  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9533 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_minuseq");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9533);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_minuseq", LOCATE_parser_prod, 7127);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___AMinusAssignOp___empty_init(val_t p0, int* init_table){
-  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
+void parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
+  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos243]) 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 = 9501;
-  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___empty_init;
+  fra.me.line = 7131;
+  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;
-  /* ./parser//parser_prod.nit:9501 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
+  init_table[itpos257] = 1;
   return;
 }
-void parser_prod___AMinusAssignOp___init_aminusassignop(val_t p0, val_t p1, int* init_table){
-  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AMinusAssignOp].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos244]) 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 = 9503;
-  fra.me.meth = LOCATE_parser_prod___AMinusAssignOp___init_aminusassignop;
+  fra.me.line = 7133;
+  fra.me.meth = LOCATE_parser_prod___AClosureDef___init_aclosuredef;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 7;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9507 */
-  CALL_parser_prod___AMinusAssignOp___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  fra.me.REG[5] = p5;
+  fra.me.REG[6] = p6;
+  /* ./parser//parser_prod.nit:7142 */
+  CALL_parser_prod___AClosureDef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7143 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9508 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9508);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7143);
   }
-  ATTR_parser_nodes___AMinusAssignOp____n_minuseq(fra.me.REG[0]) = fra.me.REG[1];
+  ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7144 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9509 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9509);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7144);
   }
   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[itpos244] = 1;
-  return;
-}
-void parser_prod___AClosureDef___n_label__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9561;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_label__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9563 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9564 */
+  /* ./parser//parser_prod.nit:7145 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7145);
+  }
+  ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7146 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7146);
+  }
+  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 */
+  ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:7153 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9565 */
+    /* ./parser//parser_prod.nit:7154 */
+    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9565);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7154);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_bang__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9537;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_bang__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9539 */
-  ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9540 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_id__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9542;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_id__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9544 */
-  ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9545 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_kwdo__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9547;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_kwdo__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9549 */
-  ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9550 */
+  /* ./parser//parser_prod.nit:7156 */
+  ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[5];
+  /* ./parser//parser_prod.nit:7157 */
+  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9551 */
+    /* ./parser//parser_prod.nit:7158 */
+    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9551);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7158);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
   }
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___AClosureDef___n_expr__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9554;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___n_expr__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9556 */
-  ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9557 */
+  /* ./parser//parser_prod.nit:7160 */
+  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
+  /* ./parser//parser_prod.nit:7161 */
+  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    REGB1 = TAG_Bool(fra.me.REG[6]==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);
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9558 */
+    /* ./parser//parser_prod.nit:7162 */
+    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9558);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7162);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:7147 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureDef___init_aclosuredef;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7148 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:7149 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9604;
+  fra.me.line = 7166;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7168 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9606 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9606);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 7168);
   }
   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]));
@@ -53809,8 +37834,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9607 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -53824,40 +37849,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9608 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9608);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7170);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7171 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TBang, ID_TBang)) /*cast TBang*/;
-      /* ./parser//parser_prod.nit:9609 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9609);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7171);
       }
-      /* ./parser//parser_prod.nit:9610 */
+      /* ./parser//parser_prod.nit:7172 */
       ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9612 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9612);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7174 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7174);
     }
-    /* ./parser//parser_prod.nit:9614 */
+    /* ./parser//parser_prod.nit:7176 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7178 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9616 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9616);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7178);
   }
   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]));
@@ -53867,8 +37884,8 @@ 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 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9617 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -53882,299 +37899,276 @@ 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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9618 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9618);
-        nit_exit(1);
+        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:7181 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AClosureId, ID_AClosureId)) /*cast AClosureId*/;
-      /* ./parser//parser_prod.nit:9619 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9619);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7181);
       }
-      /* ./parser//parser_prod.nit:9620 */
+      /* ./parser//parser_prod.nit:7182 */
       ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9622 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9622);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7184 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7184);
     }
-    /* ./parser//parser_prod.nit:9624 */
+    /* ./parser//parser_prod.nit:7186 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7188 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9626 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9626);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7188);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9627 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9627);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:7188 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:7189 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:9628 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:7190 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-          /* ./parser//parser_prod.nit:9629 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:7191 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9629);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7191);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9630 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7192 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9630);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7192);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:9631 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9631);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7193);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9633 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7195 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9633);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7195);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:9635 */
+        /* ./parser//parser_prod.nit:7197 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:9626 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
+  /* ./parser//parser_prod.nit:7200 */
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:9638 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(false);
-      REGB1 = REGB0;
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
     } else {
-      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB1 = REGB0;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9639 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7201 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9640 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9640);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7202 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7202);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwdo, ID_TKwdo)) /*cast TKwdo*/;
-      /* ./parser//parser_prod.nit:9641 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:7203 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9641);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7203);
       }
-      /* ./parser//parser_prod.nit:9642 */
+      /* ./parser//parser_prod.nit:7204 */
       ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9644 */
+      /* ./parser//parser_prod.nit:7206 */
       ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:9646 */
+    /* ./parser//parser_prod.nit:7208 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7210 */
   fra.me.REG[3] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:9648 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(false);
-      REGB1 = REGB0;
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
     } else {
-      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB1 = REGB0;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9649 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7211 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9650 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9650);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7212 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7212);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AExpr, ID_AExpr)) /*cast AExpr*/;
-      /* ./parser//parser_prod.nit:9651 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:7213 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9651);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7213);
       }
-      /* ./parser//parser_prod.nit:9652 */
+      /* ./parser//parser_prod.nit:7214 */
       ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9654 */
+      /* ./parser//parser_prod.nit:7216 */
       ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:9656 */
+    /* ./parser//parser_prod.nit:7218 */
     goto label1;
   }
+  /* ./parser//parser_prod.nit:7220 */
   fra.me.REG[3] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:9658 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(false);
-      REGB1 = REGB0;
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
     } else {
-      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB1 = REGB0;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9659 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7221 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9660 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9660);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7222 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7222);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_ALabel, ID_ALabel)) /*cast ALabel*/;
-      /* ./parser//parser_prod.nit:9661 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:7223 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9661);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7223);
       }
-      /* ./parser//parser_prod.nit:9662 */
+      /* ./parser//parser_prod.nit:7224 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9664 */
+      /* ./parser//parser_prod.nit:7226 */
       ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:9666 */
+    /* ./parser//parser_prod.nit:7228 */
     goto label1;
   }
   label1: while(0);
@@ -54182,68 +38176,48 @@ void parser_prod___AClosureDef___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AClosureDef___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  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 = 9670;
+  fra.me.line = 7232;
   fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  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[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7234 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9672 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9672);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_bang", LOCATE_parser_prod, 7234);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9673 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9673);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7235);
   }
   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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9674 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9674);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_ids", LOCATE_parser_prod, 7236);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:9675 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:9674 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(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 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9677 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -54257,20 +38231,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:9678 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9678);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7240);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:7242 */
   fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9680 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -54284,20 +38256,18 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:9681 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9681);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7243);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:7245 */
   fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9683 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -54311,402 +38281,786 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:9684 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9684);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7246);
     }
     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___AClosureDef___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
+  void OC_parser_prod___AClosureDef___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7237 */
+    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;
+  struct {struct stack_frame_t me;} fra;
   val_t tmp;
+  if (init_table[itpos259]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9688;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___visit_all_reverse;
+  fra.me.line = 7251;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___empty_init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 1;
   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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9690 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_bang");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9690);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9691 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9691);
-    nit_exit(1);
-  }
-  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]);
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9693 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9693);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:9694 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:9694 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9695 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9695);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:9696 */
-    } else {
-      /* ./parser//parser_prod.nit:9694 */
-      goto label1;
-    }
-  }
-  label1: while(0);
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9699 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:9700 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9700);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9702 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:9703 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9703);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9705 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:9706 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9706);
-      nit_exit(1);
-    }
-    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  }
   stack_frame_head = fra.me.prev;
+  init_table[itpos259] = 1;
   return;
 }
-void parser_prod___AClosureDef___empty_init(val_t p0, int* init_table){
-  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
-  struct {struct stack_frame_t me;} fra;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
   val_t tmp;
-  if (init_table[itpos245]) 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 = 9569;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___empty_init;
+  fra.me.line = 7253;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___init_asimpleclosureid;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser_prod.nit:9569 */
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7257 */
+  CALL_parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7258 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7258);
+  }
+  ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7259 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7259);
+  }
+  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[itpos245] = 1;
+  init_table[itpos260] = 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 itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AClosureDef].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
-  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 = 9571;
-  fra.me.meth = LOCATE_parser_prod___AClosureDef___init_aclosuredef;
+  fra.me.line = 7262;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  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[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  fra.me.REG[3] = p3;
-  fra.me.REG[4] = p4;
-  fra.me.REG[5] = p5;
-  fra.me.REG[6] = p6;
-  /* ./parser//parser_prod.nit:9580 */
-  CALL_parser_prod___AClosureDef___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9581 */
+  /* ./parser//parser_prod.nit:7264 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9581);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7264);
   }
-  ATTR_parser_nodes___AClosureDef____n_bang(fra.me.REG[0]) = fra.me.REG[1];
+  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]));
+  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:7265 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7266 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7266);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7267 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7268 */
+      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:7272 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7276;
+  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7278 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_table){
+  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7282;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7284;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___init_abreakclosureid;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7288 */
+  CALL_parser_prod___ABreakClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7289 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7289);
+  }
+  ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7290 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9582 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9582);
-    nit_exit(1);
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7290);
   }
   CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9583 */
+  stack_frame_head = fra.me.prev;
+  init_table[itpos262] = 1;
+  return;
+}
+void parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7293;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___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:7295 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9583);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 7295);
   }
-  ATTR_parser_nodes___AClosureDef____n_id(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9584 */
+  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]));
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9584);
-    nit_exit(1);
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
-  /* ./parser//parser_prod.nit:9585 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7296 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:9586 */
-      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9586);
-        nit_exit(1);
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9587 */
+    }
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7297 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_ids");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9587);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7297);
       }
-      fra.me.REG[1] = ATTR_parser_nodes___AClosureDef____n_ids(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:9588 */
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7298 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7299 */
+      ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9585 */
-      goto label1;
+      /* ./parser//parser_prod.nit:7301 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7301);
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
+    /* ./parser//parser_prod.nit:7303 */
+    goto label1;
   }
   label1: while(0);
-  /* ./parser//parser_prod.nit:9590 */
-  ATTR_parser_nodes___AClosureDef____n_kwdo(fra.me.REG[0]) = fra.me.REG[4];
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9591 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7307;
+  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7309 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
-    } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
-      REGB0 = REGB1;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_kwbreak", LOCATE_parser_prod, 7309);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternCalls___empty_init(val_t p0, int* init_table){
+  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCalls].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7313;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7315;
+  fra.me.meth = LOCATE_parser_prod___AExternCalls___init_aexterncalls;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7320 */
+  CALL_parser_prod___AExternCalls___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7321 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9592 */
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7321);
+  }
+  ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7322 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7322);
+  }
+  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;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:7323 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AExternCalls___init_aexterncalls;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7324 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[0], COLOR_AExternCall, ID_AExternCall)) /*cast AExternCall*/;
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9592);
-      nit_exit(1);
+    } else {
+      nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7324);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
+    /* ./parser//parser_prod.nit:7325 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  /* ./parser//parser_prod.nit:9594 */
-  ATTR_parser_nodes___AClosureDef____n_expr(fra.me.REG[0]) = fra.me.REG[5];
-  REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9595 */
+void parser_prod___AExternCalls___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7330;
+  fra.me.meth = LOCATE_parser_prod___AExternCalls___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:7332 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=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;
-    }
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 7332);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  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]));
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9596 */
+  } 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:7333 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9596);
-      nit_exit(1);
+    } 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;
+      }
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[0]);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7334 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7334);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7335 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7336 */
+      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:7340 */
+    goto label1;
   }
-  /* ./parser//parser_prod.nit:9598 */
-  ATTR_parser_nodes___ALabelable____n_label(fra.me.REG[0]) = fra.me.REG[6];
-  REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9599 */
-  if (UNTAG_Bool(REGB0)) {
+  /* ./parser//parser_prod.nit:7342 */
+  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 {
-    REGB1 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(false);
-      REGB0 = REGB1;
+    nit_abort("Uninitialized attribute %s", "_n_extern_calls", LOCATE_parser_prod, 7342);
+  }
+  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]);
+  /* ./../lib/standard//kernel.nit:332 */
+  while(1) {
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:7342 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:7343 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
+        } else {
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
+        }
+      }
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:7344 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
+        } else {
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
+          } else {
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
+          }
+        }
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:7345 */
+          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);
+          }
+          /* ./parser//parser_prod.nit:7346 */
+          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);
+          }
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7347);
+          }
+          CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+        } else {
+          /* ./parser//parser_prod.nit:7349 */
+          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);
+          }
+          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 */
+        goto label1;
+      }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
-      REGB0 = REGB1;
+      /* ./../lib/standard//kernel.nit:332 */
+      goto label2;
     }
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  label2: while(0);
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AExternCalls___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7356;
+  fra.me.meth = LOCATE_parser_prod___AExternCalls___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:7358 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AExternCalls____n_kwimport(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9600 */
-    if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9600);
-      nit_exit(1);
-    }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[0]);
+  } else {
+    nit_abort("Uninitialized attribute %s", "_n_kwimport", LOCATE_parser_prod, 7358);
   }
+  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 */
+  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);
+  }
+  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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___AExternCalls___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AExternCalls___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7360 */
+    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;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7365;
+  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;
+  return;
+}
+void parser_prod___AExternCall___init_aexterncall(val_t p0, int* init_table){
+  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7367;
+  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 */
+  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;
+  return;
+}
+void parser_prod___AExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7372;
+  fra.me.meth = LOCATE_parser_prod___AExternCall___replace_child;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 3;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
   stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
   return;
 }
-void parser_prod___ASimpleClosureId___n_id__eq(val_t p0, val_t p1){
+void parser_prod___AExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9711;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___n_id__eq;
+  fra.me.line = 7376;
+  fra.me.meth = LOCATE_parser_prod___AExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9713 */
-  ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9714 */
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ASuperExternCall___empty_init(val_t p0, int* init_table){
+  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASuperExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7381;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7383;
+  fra.me.meth = LOCATE_parser_prod___ASuperExternCall___init_asuperexterncall;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7387 */
+  CALL_parser_prod___ASuperExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7388 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7388);
+  }
+  ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7389 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7389);
+  }
   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;
   return;
 }
-void parser_prod___ASimpleClosureId___replace_child(val_t p0, val_t p1, val_t p2){
+void parser_prod___ASuperExternCall___replace_child(val_t p0, val_t p1, val_t p2){
   struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   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 = 9728;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___replace_child;
+  fra.me.line = 7392;
+  fra.me.meth = LOCATE_parser_prod___ASuperExternCall___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
   fra.me.REG[0] = NIT_NULL;
@@ -54716,15 +39070,13 @@ 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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9730 */
+  /* ./parser//parser_prod.nit:7394 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9730);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 7394);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -54732,8 +39084,8 @@ 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:7395 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9731 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -54747,195 +39099,1545 @@ 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:7396 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9732 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9732);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7396);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:9733 */
+      /* ./parser//parser_prod.nit:7397 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9733);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7397);
       }
-      /* ./parser//parser_prod.nit:9734 */
-      ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:7398 */
+      ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9736 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9736);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7400 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7400);
     }
-    /* ./parser//parser_prod.nit:9738 */
+    /* ./parser//parser_prod.nit:7402 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASimpleClosureId___visit_all(val_t p0, val_t p1){
+void parser_prod___ASuperExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9742;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all;
+  fra.me.line = 7406;
+  fra.me.meth = LOCATE_parser_prod___ASuperExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9744 */
+  /* ./parser//parser_prod.nit:7408 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___ASuperExternCall____n_kwsuper(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9744);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwsuper", LOCATE_parser_prod, 7408);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]);
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ASimpleClosureId___visit_all_reverse(val_t p0, val_t p1){
+void parser_prod___ALocalPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ALocalPropExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7412;
+  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;
+  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;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
+  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 = 9747;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___visit_all_reverse;
+  fra.me.line = 7414;
+  fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___init_alocalpropexterncall;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9749 */
+  /* ./parser//parser_prod.nit:7418 */
+  CALL_parser_prod___ALocalPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7419 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9749);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7419);
   }
-  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]);
+  ATTR_parser_nodes___ALocalPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7420 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7420);
+  }
+  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;
   return;
 }
-void parser_prod___ASimpleClosureId___empty_init(val_t p0, int* init_table){
-  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
-  struct {struct stack_frame_t me;} fra;
+void parser_prod___ALocalPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  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 = 9717;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___empty_init;
+  fra.me.line = 7423;
+  fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 1;
+  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;
-  /* ./parser//parser_prod.nit:9717 */
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7425 */
+  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);
+  }
+  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]));
+  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:7426 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7427 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7427);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7428 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7429 */
+      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:7433 */
+    goto label1;
+  }
+  label1: while(0);
   stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
   return;
 }
-void parser_prod___ASimpleClosureId___init_asimpleclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ASimpleClosureId].i;
+void parser_prod___ALocalPropExternCall___visit_all(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
-  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 = 9719;
-  fra.me.meth = LOCATE_parser_prod___ASimpleClosureId___init_asimpleclosureid;
+  fra.me.line = 7437;
+  fra.me.meth = LOCATE_parser_prod___ALocalPropExternCall___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9723 */
-  CALL_parser_prod___ASimpleClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7439 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFullPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AFullPropExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  if (init_table[itpos271]) return;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7443;
+  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;
+  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;
+  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;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7445;
+  fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___init_afullpropexterncall;
+  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;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7451 */
+  CALL_parser_prod___AFullPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7452 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7452);
+  }
+  ATTR_parser_nodes___AFullPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7453 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7453);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7454 */
+  ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7455 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==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:7456 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7456);
+    }
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  }
+  /* ./parser//parser_prod.nit:7458 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7458);
+  }
+  ATTR_parser_nodes___AFullPropExternCall____n_methid(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:7459 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7459);
+  }
+  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;
+  return;
+}
+void parser_prod___AFullPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7462;
+  fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___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:7464 */
+  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);
+  }
+  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]));
+  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:7465 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7466 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7466);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7467 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7468 */
+      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:7472 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7474 */
+  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)) {
+  } 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:7475 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7476 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7476);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7477 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7478 */
+      ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = fra.me.REG[2];
+    } else {
+      /* ./parser//parser_prod.nit:7480 */
+      ATTR_parser_nodes___AFullPropExternCall____n_quad(fra.me.REG[0]) = NIT_NULL;
+    }
+    /* ./parser//parser_prod.nit:7482 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7484 */
+  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);
+  }
+  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]));
+  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:7485 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7486 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7486);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7487 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7488 */
+      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:7492 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AFullPropExternCall___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 = 7496;
+  fra.me.meth = LOCATE_parser_prod___AFullPropExternCall___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:7498 */
+  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);
+  }
+  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 */
+  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)) {
+  } 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:7500 */
+    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);
+    }
+    CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  }
+  /* ./parser//parser_prod.nit:7502 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitPropExternCall___empty_init(val_t p0, int* init_table){
+  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AInitPropExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7506;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7508;
+  fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___init_ainitpropexterncall;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7512 */
+  CALL_parser_prod___AInitPropExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7513 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7513);
+  }
+  ATTR_parser_nodes___AInitPropExternCall____n_classid(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7514 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7514);
+  }
+  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;
+  return;
+}
+void parser_prod___AInitPropExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7517;
+  fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___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:7519 */
+  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);
+  }
+  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]));
+  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:7520 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7521 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7521);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7522 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7523 */
+      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:7527 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AInitPropExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7531;
+  fra.me.meth = LOCATE_parser_prod___AInitPropExternCall___visit_all;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 2;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7533 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACastAsExternCall___empty_init(val_t p0, int* init_table){
+  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ACastAsExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7537;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7539;
+  fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___init_acastasexterncall;
+  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;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7545 */
+  CALL_parser_prod___ACastAsExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7546 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7546);
+  }
+  ATTR_parser_nodes___ACastAsExternCall____n_from_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7547 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7547);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7548 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7548);
+  }
+  ATTR_parser_nodes___ACastAsExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7549 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7549);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7550 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7550);
+  }
+  ATTR_parser_nodes___ACastAsExternCall____n_to_type(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:7551 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7551);
+  }
+  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;
+  return;
+}
+void parser_prod___ACastAsExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7554;
+  fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___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:7556 */
+  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);
+  }
+  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]));
+  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:7557 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7558 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7558);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7559 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7560 */
+      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:7564 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7566 */
+  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);
+  }
+  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]));
+  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:7567 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7568 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7568);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7569 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TKwas, ID_TKwas)) /*cast TKwas*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7569);
+      }
+      /* ./parser//parser_prod.nit:7570 */
+      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:7574 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7576 */
+  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);
+  }
+  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]));
+  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:7577 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7578 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7578);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7579 */
+      REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AType, ID_AType)) /*cast AType*/;
+      if (UNTAG_Bool(REGB0)) {
+      } else {
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7579);
+      }
+      /* ./parser//parser_prod.nit:7580 */
+      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:7584 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___ACastAsExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7588;
+  fra.me.meth = LOCATE_parser_prod___ACastAsExternCall___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:7590 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNullableExternCall___empty_init(val_t p0, int* init_table){
+  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNullableExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7596;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7598;
+  fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___init_aasnullableexterncall;
+  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;
+  fra.me.REG[3] = p3;
+  /* ./parser//parser_prod.nit:7604 */
+  CALL_parser_prod___AAsNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7605 */
   REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9724 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9724);
-    nit_exit(1);
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7605);
+  }
+  ATTR_parser_nodes___AAsNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7606 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7606);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7607 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7607);
+  }
+  ATTR_parser_nodes___AAsNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7608 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7608);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7609 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7609);
+  }
+  ATTR_parser_nodes___AAsNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:7610 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7610);
+  }
+  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;
+  return;
+}
+void parser_prod___AAsNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7613;
+  fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___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:7615 */
+  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);
+  }
+  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]));
+  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:7616 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7617 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7617);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7618 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7619 */
+      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:7623 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7625 */
+  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);
+  }
+  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]));
+  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:7626 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7627 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7627);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7628 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7629 */
+      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:7633 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7635 */
+  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);
+  }
+  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]));
+  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:7636 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7637 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7637);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7638 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7639 */
+      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:7643 */
+    goto label1;
+  }
+  label1: while(0);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNullableExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7647;
+  fra.me.meth = LOCATE_parser_prod___AAsNullableExternCall___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:7649 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser_prod___AAsNotNullableExternCall___empty_init(val_t p0, int* init_table){
+  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AAsNotNullableExternCall].i;
+  struct {struct stack_frame_t me;} fra;
+  val_t tmp;
+  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 = 7655;
+  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;
+  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;
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  val_t REGB0;
+  val_t tmp;
+  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 = 7657;
+  fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 5;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  fra.me.REG[2] = p2;
+  fra.me.REG[3] = p3;
+  fra.me.REG[4] = p4;
+  /* ./parser//parser_prod.nit:7664 */
+  CALL_parser_prod___AAsNotNullableExternCall___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* ./parser//parser_prod.nit:7665 */
+  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7665);
+  }
+  ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7666 */
+  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7666);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7667 */
+  REGB0 = TAG_Bool(fra.me.REG[2]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7667);
+  }
+  ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7668 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7668);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7669 */
+  REGB0 = TAG_Bool(fra.me.REG[3]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7669);
+  }
+  ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnot(fra.me.REG[0]) = fra.me.REG[3];
+  /* ./parser//parser_prod.nit:7670 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7670);
+  }
+  CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
+  /* ./parser//parser_prod.nit:7671 */
+  REGB0 = TAG_Bool(fra.me.REG[4]!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7671);
+  }
+  ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[4];
+  /* ./parser//parser_prod.nit:7672 */
+  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+    nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7672);
+  }
+  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;
+  return;
+}
+void parser_prod___AAsNotNullableExternCall___replace_child(val_t p0, val_t p1, val_t p2){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+  val_t REGB0;
+  val_t REGB1;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser_prod;
+  fra.me.line = 7675;
+  fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___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:7677 */
+  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);
+  }
+  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]));
+  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:7678 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7679 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7679);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7680 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7681 */
+      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:7685 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7687 */
+  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);
+  }
+  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]));
+  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:7688 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
+    } else {
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        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:7689 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7689);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7690 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7691 */
+      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:7695 */
+    goto label1;
+  }
+  /* ./parser//parser_prod.nit:7697 */
+  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);
+  }
+  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]));
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+    REGB0 = REGB1;
   }
-  ATTR_parser_nodes___ASimpleClosureId____n_id(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9725 */
   if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9725);
-    nit_exit(1);
+    /* ./parser//parser_prod.nit:7698 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==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:7699 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7699);
+      }
+      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7700 */
+      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);
+      }
+      /* ./parser//parser_prod.nit:7701 */
+      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:7705 */
+    goto label1;
   }
-  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[itpos248] = 1;
-  return;
-}
-void parser_prod___ABreakClosureId___n_kwbreak__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9753;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___n_kwbreak__eq;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9755 */
-  ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9756 */
-  CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABreakClosureId___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9770;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9772 */
+  /* ./parser//parser_prod.nit:7707 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9772);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwnullable", LOCATE_parser_prod, 7707);
   }
-  fra.me.REG[3] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
+  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]));
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -54943,8 +40645,8 @@ 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:7708 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9773 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -54958,368 +40660,353 @@ 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:7709 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9774 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9774);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7709);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], 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*/;
-      /* ./parser//parser_prod.nit:9775 */
+      /* ./parser//parser_prod.nit:7710 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9775);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7710);
       }
-      /* ./parser//parser_prod.nit:9776 */
-      ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[2];
+      /* ./parser//parser_prod.nit:7711 */
+      ATTR_parser_nodes___AAsNotNullableExternCall____n_kwnullable(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9778 */
-      fprintf(stderr, "Aborted");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9778);
-      nit_exit(1);
+      /* ./parser//parser_prod.nit:7713 */
+      nit_abort("Aborted", NULL, LOCATE_parser_prod, 7713);
     }
-    /* ./parser//parser_prod.nit:9780 */
+    /* ./parser//parser_prod.nit:7715 */
     goto label1;
   }
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABreakClosureId___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser_prod___AAsNotNullableExternCall___visit_all(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9784;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all;
+  fra.me.line = 7719;
+  fra.me.meth = LOCATE_parser_prod___AAsNotNullableExternCall___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9786 */
+  /* ./parser//parser_prod.nit:7721 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotNullableExternCall____n_type(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9786);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_type", LOCATE_parser_prod, 7721);
   }
-  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]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ABreakClosureId___visit_all_reverse(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9789;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___visit_all_reverse;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9791 */
+  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 */
+  REGB0 = TAG_Bool(ATTR_parser_nodes___AAsNotNullableExternCall____n_kwas(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_kwbreak");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9791);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_kwas", LOCATE_parser_prod, 7722);
   }
-  fra.me.REG[0] = ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]);
+  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 */
+  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);
+  }
+  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 */
+  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);
+  }
+  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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___ABreakClosureId___empty_init(val_t p0, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ABreakClosureId].i;
+void parser_prod___AQualified___empty_init(val_t p0, int* init_table){
+  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos249]) 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 = 9759;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___empty_init;
+  fra.me.line = 7728;
+  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;
-  /* ./parser//parser_prod.nit:9759 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
-  return;
-}
-void parser_prod___ABreakClosureId___init_abreakclosureid(val_t p0, val_t p1, int* init_table){
-  int itpos250 = 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[itpos250]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9761;
-  fra.me.meth = LOCATE_parser_prod___ABreakClosureId___init_abreakclosureid;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser_prod.nit:9765 */
-  CALL_parser_prod___ABreakClosureId___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  REGB0 = TAG_Bool(fra.me.REG[1]!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9766 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Cast failed");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9766);
-    nit_exit(1);
-  }
-  ATTR_parser_nodes___ABreakClosureId____n_kwbreak(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9767 */
-  if (UNTAG_Bool(REGB0)) {
-    fprintf(stderr, "Reciever is null");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9767);
-    nit_exit(1);
-  }
-  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[itpos250] = 1;
+  init_table[itpos281] = 1;
   return;
 }
-void parser_prod___AQualified___n_classid__eq(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+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;
+  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;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9795;
-  fra.me.meth = LOCATE_parser_prod___AQualified___n_classid__eq;
+  fra.me.line = 7730;
+  fra.me.meth = LOCATE_parser_prod___AQualified___init_aqualified;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  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:9797 */
-  ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[1];
-  REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9798 */
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7735 */
+  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 */
+  ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
+  /* ./parser//parser_prod.nit:7742 */
+  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
+    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[1])(fra.me.REG[1], NIT_NULL);
+      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)) {
-    REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9799 */
+    /* ./parser//parser_prod.nit:7743 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9799);
-      nit_exit(1);
+      nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7743);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+    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;
   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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:7736 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AQualified___init_aqualified;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7737 */
+    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);
+    }
+    /* ./parser//parser_prod.nit:7738 */
+    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);
+    }
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
+  }
 void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9822;
+  fra.me.line = 7747;
   fra.me.meth = LOCATE_parser_prod___AQualified___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7749 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9824 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9824);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7749);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9825 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9825);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:7749 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:7750 */
+      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);
+      }
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:9826 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:7751 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TId, ID_TId)) /*cast TId*/;
-          /* ./parser//parser_prod.nit:9827 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:7752 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9827);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7752);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9828 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7753 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9828);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7753);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:9829 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9829);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7754);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9831 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7756 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9831);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7756);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:9833 */
+        /* ./parser//parser_prod.nit:7758 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:9824 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
+  /* ./parser//parser_prod.nit:7761 */
   fra.me.REG[3] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
-  REGB1 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
-  /* ./parser//parser_prod.nit:9836 */
-  if (UNTAG_Bool(REGB1)) {
+  REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+  if (UNTAG_Bool(REGB0)) {
   } else {
-    REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
-    if (UNTAG_Bool(REGB0)) {
-      REGB0 = TAG_Bool(false);
-      REGB1 = REGB0;
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
     } else {
-      REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
-      REGB1 = REGB0;
+      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+      REGB0 = REGB1;
     }
   }
-  if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9837 */
-    if (UNTAG_Bool(REGB1)) {
+  if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7762 */
+    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+    if (UNTAG_Bool(REGB0)) {
     } else {
-      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(false);
-        REGB1 = REGB0;
+      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB1)) {
+        REGB1 = TAG_Bool(false);
+        REGB0 = REGB1;
       } else {
-        REGB0 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-        REGB1 = REGB0;
+        REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+        REGB0 = REGB1;
       }
     }
-    REGB1 = TAG_Bool(!UNTAG_Bool(REGB1));
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9838 */
-      if (UNTAG_Bool(REGB1)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9838);
-        nit_exit(1);
+    REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+    if (UNTAG_Bool(REGB0)) {
+      /* ./parser//parser_prod.nit:7763 */
+      REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+      if (UNTAG_Bool(REGB0)) {
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7763);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-      REGB1 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TClassid, ID_TClassid)) /*cast TClassid*/;
-      /* ./parser//parser_prod.nit:9839 */
-      if (UNTAG_Bool(REGB1)) {
+      /* ./parser//parser_prod.nit:7764 */
+      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 {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9839);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7764);
       }
-      /* ./parser//parser_prod.nit:9840 */
+      /* ./parser//parser_prod.nit:7765 */
       ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
     } else {
-      /* ./parser//parser_prod.nit:9842 */
+      /* ./parser//parser_prod.nit:7767 */
       ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = NIT_NULL;
     }
-    /* ./parser//parser_prod.nit:9844 */
+    /* ./parser//parser_prod.nit:7769 */
     goto label1;
   }
   label1: while(0);
@@ -55327,84 +41014,14 @@ void parser_prod___AQualified___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___AQualified___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  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 = 9848;
-  fra.me.meth = LOCATE_parser_prod___AQualified___visit_all;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9850 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9850);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-  fra.me.REG[2] = CALL_abstract_collection___Collection___iterator(fra.me.REG[2])(fra.me.REG[2]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[2])(fra.me.REG[2]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[2])(fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:9851 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[3]);
-    } else {
-      /* ./parser//parser_prod.nit:9850 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[2])(fra.me.REG[2]);
-  }
-  label1: while(0);
-  fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9853 */
-  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)) {
-    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*/;
-    /* ./parser//parser_prod.nit:9854 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9854);
-      nit_exit(1);
-    }
-    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___AQualified___visit_all_reverse(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 = 9858;
-  fra.me.meth = LOCATE_parser_prod___AQualified___visit_all_reverse;
+  fra.me.line = 7773;
+  fra.me.meth = LOCATE_parser_prod___AQualified___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -55412,46 +41029,17 @@ void parser_prod___AQualified___visit_all_reverse(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 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9861 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9861);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_id", LOCATE_parser_prod, 7775);
   }
   fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:9862 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:9862 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9863 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9863);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:9864 */
-    } else {
-      /* ./parser//parser_prod.nit:9862 */
-      goto label1;
-    }
-  }
-  label1: while(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 */
   fra.me.REG[2] = ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9867 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -55465,245 +41053,231 @@ void parser_prod___AQualified___visit_all_reverse(val_t p0, val_t p1){
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7779 */
     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*/;
-    /* ./parser//parser_prod.nit:9868 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9868);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7779);
     }
     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___AQualified___empty_init(val_t p0, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
+  void OC_parser_prod___AQualified___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___AQualified___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7776 */
+    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;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
-  if (init_table[itpos251]) 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 = 9803;
-  fra.me.meth = LOCATE_parser_prod___AQualified___empty_init;
+  fra.me.line = 7784;
+  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;
-  /* ./parser//parser_prod.nit:9803 */
   stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 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 itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_AQualified].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t REGB1;
+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;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t tmp;
-  if (init_table[itpos252]) 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 = 9805;
-  fra.me.meth = LOCATE_parser_prod___AQualified___init_aqualified;
+  fra.me.line = 7786;
+  fra.me.meth = LOCATE_parser_prod___ADoc___init_adoc;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:9810 */
-  CALL_parser_prod___AQualified___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:9811 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[3] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast TId*/;
-      /* ./parser//parser_prod.nit:9812 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9812);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9813 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_id");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9813);
-        nit_exit(1);
-      }
-      fra.me.REG[4] = ATTR_parser_nodes___AQualified____n_id(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-      /* ./parser//parser_prod.nit:9814 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:9811 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
-  /* ./parser//parser_prod.nit:9816 */
-  ATTR_parser_nodes___AQualified____n_classid(fra.me.REG[0]) = fra.me.REG[2];
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9817 */
-  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;
+  /* ./parser//parser_prod.nit:7790 */
+  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;
+  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){
+    struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+    val_t REGB0;
+    fun_t CREG[1];
+    val_t tmp;
+    /* ./parser//parser_prod.nit:7791 */
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ADoc___init_adoc;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 2;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.REG[1] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7792 */
+    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);
     }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9818 */
+    /* ./parser//parser_prod.nit:7793 */
+    REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(closctx->REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB0)) {
-      fprintf(stderr, "Reciever is null");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9818);
-      nit_exit(1);
+    } else {
+      nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7793);
     }
-    CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+    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 */
+    CALL_parser_prod___ANode___parent__eq(fra.me.REG[0])(fra.me.REG[0], closctx->REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  stack_frame_head = fra.me.prev;
-  init_table[itpos252] = 1;
-  return;
-}
 void parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t REGB2;
+  val_t REGB3;
+  val_t REGB4;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9888;
+  fra.me.line = 7798;
   fra.me.meth = LOCATE_parser_prod___ADoc___replace_child;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  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[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7800 */
   REGB0 = TAG_Int(0);
   REGB1 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9890 */
   if (UNTAG_Bool(REGB1)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9890);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7800);
   }
   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]);
-  fra.me.REG[3] = NEW_Range_range___Range___without_last(REGB0, REGB1);
-  fra.me.REG[3] = CALL_abstract_collection___Collection___iterator(fra.me.REG[3])(fra.me.REG[3]);
+  /* ./../lib/standard//kernel.nit:332 */
   while(1) {
-    REGB1 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[3])(fra.me.REG[3]);
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = CALL_abstract_collection___Iterator___item(fra.me.REG[3])(fra.me.REG[3]);
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9891 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9891);
-        nit_exit(1);
+    /* ./../lib/standard//kernel.nit:212 */
+    REGB2 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
+    /* ./../lib/standard//kernel.nit:332 */
+    if (UNTAG_Bool(REGB2)) {
+      /* ./parser//parser_prod.nit:7800 */
+      REGB2 = REGB0;
+      /* ./parser//parser_prod.nit:7801 */
+      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);
       }
-      fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-      fra.me.REG[4] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[4])(fra.me.REG[4], REGB1);
-      REGB0 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[4]));
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        REGB2 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
-        if (UNTAG_Bool(REGB2)) {
-          REGB2 = TAG_Bool(false);
-          REGB0 = REGB2;
+      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);
+      REGB3 = TAG_Bool(IS_EQUAL_ON(fra.me.REG[1],fra.me.REG[3]));
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+        if (UNTAG_Bool(REGB4)) {
+          REGB4 = TAG_Bool(false);
+          REGB3 = REGB4;
         } else {
-          REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[1]);
-          REGB0 = REGB2;
+          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          REGB3 = REGB4;
         }
       }
-      if (UNTAG_Bool(REGB0)) {
-        REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-        /* ./parser//parser_prod.nit:9892 */
-        if (UNTAG_Bool(REGB0)) {
+      if (UNTAG_Bool(REGB3)) {
+        /* ./parser//parser_prod.nit:7802 */
+        REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+        if (UNTAG_Bool(REGB3)) {
         } else {
-          REGB2 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          if (UNTAG_Bool(REGB2)) {
-            REGB2 = TAG_Bool(false);
-            REGB0 = REGB2;
+          REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB4)) {
+            REGB4 = TAG_Bool(false);
+            REGB3 = REGB4;
           } else {
-            REGB2 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
-            REGB0 = REGB2;
+            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+            REGB3 = REGB4;
           }
         }
-        REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-        if (UNTAG_Bool(REGB0)) {
-          REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast TComment*/;
-          /* ./parser//parser_prod.nit:9893 */
-          if (UNTAG_Bool(REGB0)) {
+        REGB3 = TAG_Bool(!UNTAG_Bool(REGB3));
+        if (UNTAG_Bool(REGB3)) {
+          /* ./parser//parser_prod.nit:7803 */
+          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 {
-            fprintf(stderr, "Assert failed");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9893);
-            nit_exit(1);
+            nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7803);
           }
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9894 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7804 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9894);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7804);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-          CALL_abstract_collection___Map_____braeq(fra.me.REG[4])(fra.me.REG[4], REGB1, fra.me.REG[2]);
-          REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-          /* ./parser//parser_prod.nit:9895 */
-          if (UNTAG_Bool(REGB0)) {
-            fprintf(stderr, "Reciever is null");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9895);
-            nit_exit(1);
+          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 */
+          REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
+            nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7805);
           }
           CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
         } else {
-          REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-          /* ./parser//parser_prod.nit:9897 */
-          if (UNTAG_Bool(REGB0)) {
+          /* ./parser//parser_prod.nit:7807 */
+          REGB3 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
+          if (UNTAG_Bool(REGB3)) {
           } else {
-            fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-            fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9897);
-            nit_exit(1);
+            nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7807);
           }
-          fra.me.REG[4] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-          CALL_abstract_collection___Map___remove_at(fra.me.REG[4])(fra.me.REG[4], REGB1);
+          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:9899 */
+        /* ./parser//parser_prod.nit:7809 */
         goto label1;
       }
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB2 = TAG_Int(1);
+      /* ./../lib/standard//kernel.nit:215 */
+      REGB2 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB2));
+      /* ./../lib/standard//kernel.nit:334 */
+      REGB0 = REGB2;
     } else {
-      /* ./parser//parser_prod.nit:9890 */
+      /* ./../lib/standard//kernel.nit:332 */
       goto label2;
     }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[3])(fra.me.REG[3]);
   }
   label2: while(0);
   label1: while(0);
@@ -55711,55 +41285,59 @@ void parser_prod___ADoc___replace_child(val_t p0, val_t p1, val_t p2){
   return;
 }
 void parser_prod___ADoc___visit_all(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9904;
+  fra.me.line = 7814;
   fra.me.meth = LOCATE_parser_prod___ADoc___visit_all;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
+  fra.me.REG_size = 2;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
+  /* ./parser//parser_prod.nit:7816 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9906 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9906);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_comment", LOCATE_parser_prod, 7816);
   }
   fra.me.REG[0] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-  fra.me.REG[0] = CALL_abstract_collection___Collection___iterator(fra.me.REG[0])(fra.me.REG[0]);
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[0])(fra.me.REG[0]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[0])(fra.me.REG[0]);
-      /* ./parser//parser_prod.nit:9907 */
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-    } else {
-      /* ./parser//parser_prod.nit:9906 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[0])(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));
+  stack_frame_head = fra.me.prev;
+  return;
+}
+  void OC_parser_prod___ADoc___visit_all_1(struct stack_frame_t *closctx, val_t p0, struct stack_frame_t *closctx_param, fun_t clos_fun0){
+    struct {struct stack_frame_t me;} fra;
+    fun_t CREG[1];
+    val_t tmp;
+    fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+    fra.me.file = LOCATE_parser_prod;
+    fra.me.line = 0;
+    fra.me.meth = LOCATE_parser_prod___ADoc___visit_all;
+    fra.me.has_broke = 0;
+    fra.me.REG_size = 1;
+    fra.me.REG[0] = NIT_NULL;
+    fra.me.closure_ctx = closctx_param;
+    fra.me.closure_funs = CREG;
+    fra.me.REG[0] = p0;
+    CREG[0] = clos_fun0;
+    /* ./parser//parser_prod.nit:7817 */
+    CALL_parser_prod___Visitor___enter_visit(closctx->REG[1])(closctx->REG[1], fra.me.REG[0]);
+    stack_frame_head = fra.me.prev;
+    return;
   }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADoc___visit_all_reverse(val_t p0, val_t p1){
+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;
   struct {struct stack_frame_t me; val_t MORE_REG[2];} fra;
-  val_t REGB0;
-  val_t REGB1;
   val_t tmp;
+  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 = 9911;
-  fra.me.meth = LOCATE_parser_prod___ADoc___visit_all_reverse;
+  fra.me.line = 7823;
+  fra.me.meth = LOCATE_parser_prod___Start___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
   fra.me.REG[0] = NIT_NULL;
@@ -55767,119 +41345,13 @@ void parser_prod___ADoc___visit_all_reverse(val_t p0, val_t p1){
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9914 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9914);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-  REGB0 = CALL_abstract_collection___Collection___length(fra.me.REG[2])(fra.me.REG[2]);
-  /* ./parser//parser_prod.nit:9915 */
-  while(1) {
-    REGB1 = TAG_Int(0);
-    REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-    /* ./parser//parser_prod.nit:9915 */
-    if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9916 */
-      if (UNTAG_Bool(REGB1)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9916);
-        nit_exit(1);
-      }
-      fra.me.REG[2] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-      fra.me.REG[2] = CALL_abstract_collection___MapRead_____bra(fra.me.REG[2])(fra.me.REG[2], REGB0);
-      CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-      REGB1 = TAG_Int(1);
-      REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-      REGB0 = REGB1;
-    /* ./parser//parser_prod.nit:9917 */
-    } else {
-      /* ./parser//parser_prod.nit:9915 */
-      goto label1;
-    }
-  }
-  label1: while(0);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser_prod___ADoc___empty_init(val_t p0, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
-  struct {struct stack_frame_t me;} fra;
-  val_t tmp;
-  if (init_table[itpos253]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9874;
-  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;
-  /* ./parser//parser_prod.nit:9874 */
-  stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
-  return;
-}
-void parser_prod___ADoc___init_adoc(val_t p0, val_t p1, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ADoc].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos254]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9876;
-  fra.me.meth = LOCATE_parser_prod___ADoc___init_adoc;
-  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;
-  /* ./parser//parser_prod.nit:9880 */
-  CALL_parser_prod___ADoc___empty_init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  fra.me.REG[1] = CALL_abstract_collection___Collection___iterator(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser_prod.nit:9881 */
-  while(1) {
-    REGB0 = CALL_abstract_collection___Iterator___is_ok(fra.me.REG[1])(fra.me.REG[1]);
-    if (UNTAG_Bool(REGB0)) {
-      fra.me.REG[2] = CALL_abstract_collection___Iterator___item(fra.me.REG[1])(fra.me.REG[1]);
-      REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_TComment, ID_TComment)) /*cast TComment*/;
-      /* ./parser//parser_prod.nit:9882 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9882);
-        nit_exit(1);
-      }
-      REGB0 = TAG_Bool(ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0])!=NIT_NULL);
-      /* ./parser//parser_prod.nit:9883 */
-      if (UNTAG_Bool(REGB0)) {
-      } else {
-        fprintf(stderr, "Uninitialized attribute %s", "_n_comment");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9883);
-        nit_exit(1);
-      }
-      fra.me.REG[3] = ATTR_parser_nodes___ADoc____n_comment(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[2]);
-      /* ./parser//parser_prod.nit:9884 */
-      CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
-    } else {
-      /* ./parser//parser_prod.nit:9881 */
-      goto label1;
-    }
-    CALL_abstract_collection___Iterator___next(fra.me.REG[1])(fra.me.REG[1]);
-  }
-  label1: while(0);
+  fra.me.REG[2] = p2;
+  /* ./parser//parser_prod.nit:7827 */
+  ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
+  /* ./parser//parser_prod.nit:7828 */
+  ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
   stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
+  init_table[itpos285] = 1;
   return;
 }
 void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
@@ -55889,7 +41361,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 = 9932;
+  fra.me.line = 7831;
   fra.me.meth = LOCATE_parser_prod___Start___replace_child;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
@@ -55900,9 +41372,9 @@ 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 */
   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]));
-  /* ./parser//parser_prod.nit:9934 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
@@ -55915,8 +41387,8 @@ void parser_prod___Start___replace_child(val_t p0, val_t p1, val_t p2){
     }
   }
   if (UNTAG_Bool(REGB0)) {
+    /* ./parser//parser_prod.nit:7834 */
     REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-    /* ./parser//parser_prod.nit:9935 */
     if (UNTAG_Bool(REGB0)) {
     } else {
       REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -55930,28 +41402,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 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-      /* ./parser//parser_prod.nit:9937 */
       if (UNTAG_Bool(REGB0)) {
-        fprintf(stderr, "Reciever is null");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9937);
-        nit_exit(1);
+        nit_abort("Reciever is null", NULL, LOCATE_parser_prod, 7836);
       }
       CALL_parser_prod___ANode___parent__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[0]);
+      /* ./parser//parser_prod.nit:7837 */
       REGB0 = TAG_Bool((fra.me.REG[2]!=NIT_NULL) && VAL_ISA(fra.me.REG[2], COLOR_AModule, ID_AModule)) /*cast AModule*/;
-      /* ./parser//parser_prod.nit:9938 */
       if (UNTAG_Bool(REGB0)) {
       } else {
-        fprintf(stderr, "Assert failed");
-        fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9938);
-        nit_exit(1);
+        nit_abort("Assert failed", NULL, LOCATE_parser_prod, 7837);
       }
-      /* ./parser//parser_prod.nit:9939 */
+      /* ./parser//parser_prod.nit:7838 */
       ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[2];
     }
-    /* ./parser//parser_prod.nit:9941 */
+    /* ./parser//parser_prod.nit:7840 */
     CALL_parser_prod___ANode___parent__eq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
-    /* ./parser//parser_prod.nit:9942 */
+    /* ./parser//parser_prod.nit:7841 */
     goto label1;
   }
   label1: while(0);
@@ -55965,7 +41433,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 = 9946;
+  fra.me.line = 7845;
   fra.me.meth = LOCATE_parser_prod___Start___visit_all;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
@@ -55974,9 +41442,9 @@ 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 */
   fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
   REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9948 */
   if (UNTAG_Bool(REGB0)) {
   } else {
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
@@ -55990,108 +41458,23 @@ 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 */
     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*/;
-    /* ./parser//parser_prod.nit:9949 */
     if (UNTAG_Bool(REGB0)) {
     } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9949);
-      nit_exit(1);
+      nit_abort("Cast failed", NULL, LOCATE_parser_prod, 7848);
     }
     CALL_parser_prod___Visitor___enter_visit(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
   }
+  /* ./parser//parser_prod.nit:7850 */
   REGB0 = TAG_Bool(ATTR_parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9951 */
   if (UNTAG_Bool(REGB0)) {
   } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_eof");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9951);
-    nit_exit(1);
+    nit_abort("Uninitialized attribute %s", "_n_eof", LOCATE_parser_prod, 7850);
   }
   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]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser_prod___Start___visit_all_reverse(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 = 9954;
-  fra.me.meth = LOCATE_parser_prod___Start___visit_all_reverse;
-  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;
-  REGB0 = TAG_Bool(ATTR_parser_nodes___Start____n_eof(fra.me.REG[0])!=NIT_NULL);
-  /* ./parser//parser_prod.nit:9956 */
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    fprintf(stderr, "Uninitialized attribute %s", "_n_eof");
-    fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9956);
-    nit_exit(1);
-  }
-  fra.me.REG[2] = 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[2]);
-  fra.me.REG[2] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
-  REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
-  /* ./parser//parser_prod.nit:9957 */
-  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)) {
-    fra.me.REG[0] = ATTR_parser_nodes___Start____n_base(fra.me.REG[0]);
-    REGB0 = TAG_Bool((fra.me.REG[0]!=NIT_NULL) && VAL_ISA(fra.me.REG[0], COLOR_AModule, ID_AModule)) /*cast AModule*/;
-    /* ./parser//parser_prod.nit:9958 */
-    if (UNTAG_Bool(REGB0)) {
-    } else {
-      fprintf(stderr, "Cast failed");
-      fprintf(stderr, " (%s:%d)\n", LOCATE_parser_prod, 9958);
-      nit_exit(1);
-    }
-    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___Start___init(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos255 = 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[itpos255]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser_prod;
-  fra.me.line = 9924;
-  fra.me.meth = LOCATE_parser_prod___Start___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 3;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  fra.me.REG[2] = p2;
-  /* ./parser//parser_prod.nit:9928 */
-  ATTR_parser_nodes___Start____n_base(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser_prod.nit:9929 */
-  ATTR_parser_nodes___Start____n_eof(fra.me.REG[0]) = fra.me.REG[2];
-  stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
-  return;
-}