tests: add base_attr_boxing.nit
[nit.git] / c_src / parser._sep.c
index 6acc14b..ad6f818 100644 (file)
@@ -10,9 +10,10 @@ val_t parser___State___state(val_t p0){
   fra.me.meth = LOCATE_parser___State___state;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:9 */
+  /* parser/parser.nit:9 */
   REGB0 = TAG_Bool(ATTR_parser___State____state(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -32,10 +33,11 @@ void parser___State___state__eq(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___State___state__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:9 */
+  /* parser/parser.nit:9 */
   ATTR_parser___State____state(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
   return;
@@ -49,9 +51,10 @@ val_t parser___State___nodes(val_t p0){
   fra.me.meth = LOCATE_parser___State___nodes;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:12 */
+  /* parser/parser.nit:12 */
   fra.me.REG[0] = ATTR_parser___State____nodes(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
@@ -65,17 +68,18 @@ void parser___State___nodes__eq(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___State___nodes__eq;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:12 */
+  /* parser/parser.nit:12 */
   ATTR_parser___State____nodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
 }
 void parser___State___init(val_t p0, val_t p1, val_t p2, int* init_table){
-  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_State].i;
+  int itpos0 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___State].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
@@ -86,21 +90,22 @@ void parser___State___init(val_t p0, val_t p1, val_t p2, int* init_table){
   fra.me.meth = LOCATE_parser___State___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
-  /* ./parser//parser.nit:17 */
+  /* parser/parser.nit:17 */
   ATTR_parser___State____state(fra.me.REG[0]) = REGB0;
-  /* ./parser//parser.nit:18 */
+  /* parser/parser.nit:18 */
   ATTR_parser___State____nodes(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   init_table[itpos0] = 1;
   return;
 }
 void parser___Parser___init(val_t p0, val_t p1, int* init_table){
-  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_Parser].i;
+  int itpos1 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___Parser].i;
   struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
   val_t REGB0;
   val_t tmp;
@@ -111,22 +116,23 @@ void parser___Parser___init(val_t p0, val_t p1, int* init_table){
   fra.me.meth = LOCATE_parser___Parser___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:36 */
+  /* parser/parser.nit:36 */
   ATTR_parser___Parser____lexer(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser.nit:37 */
-  fra.me.REG[1] = NEW_Array_array___Array___init();
+  /* parser/parser.nit:37 */
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___init();
   ATTR_parser___Parser____stack(fra.me.REG[0]) = fra.me.REG[1];
-  /* ./parser//parser.nit:38 */
+  /* parser/parser.nit:38 */
   REGB0 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:216 */
+  /* ../lib/standard/kernel.nit:236 */
   REGB0 = TAG_Int(-UNTAG_Int(REGB0));
-  /* ./parser//parser.nit:38 */
+  /* parser/parser.nit:38 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB0;
-  /* ./parser//parser.nit:39 */
+  /* parser/parser.nit:39 */
   CALL_parser___Parser___build_reduce_table(fra.me.REG[0])(fra.me.REG[0]);
   stack_frame_head = fra.me.prev;
   init_table[itpos1] = 1;
@@ -149,81 +155,97 @@ val_t parser___Parser___go_to(val_t p0, val_t p1){
   fra.me.meth = LOCATE_parser___Parser___go_to;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
-  /* ./parser//parser.nit:45 */
+  /* parser/parser.nit:45 */
   REGB1 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
-  /* ./parser//parser.nit:46 */
+  /* parser/parser.nit:46 */
   REGB2 = TAG_Int(1);
-  /* ./parser//parser.nit:47 */
+  /* parser/parser.nit:47 */
   REGB3 = TAG_Int(0);
-  REGB3 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
+  REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
   REGB4 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:217 */
+  /* ../lib/standard/kernel.nit:237 */
   REGB4 = TAG_Int(UNTAG_Int(REGB3)-UNTAG_Int(REGB4));
-  /* ./parser//parser.nit:49 */
+  /* parser/parser.nit:49 */
   while(1) {
-    /* ./../lib/standard//kernel.nit:211 */
+    REGB3 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:231 */
     REGB3 = TAG_Bool(UNTAG_Int(REGB2)<=UNTAG_Int(REGB4));
-    /* ./parser//parser.nit:49 */
+    /* parser/parser.nit:49 */
     if (UNTAG_Bool(REGB3)) {
-      /* ./../lib/standard//kernel.nit:215 */
+      /* ../lib/standard/kernel.nit:235 */
       REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB4));
-      /* ./parser//parser.nit:50 */
+      /* parser/parser.nit:50 */
       REGB5 = TAG_Int(2);
-      /* ./../lib/standard//kernel.nit:219 */
+      /* ../lib/standard/kernel.nit:239 */
       REGB5 = TAG_Int(UNTAG_Int(REGB3)/UNTAG_Int(REGB5));
-      /* ./parser//parser.nit:51 */
+      /* parser/parser.nit:51 */
       REGB3 = TAG_Int(2);
-      /* ./../lib/standard//kernel.nit:218 */
+      /* ../lib/standard/kernel.nit:238 */
       REGB3 = TAG_Int(UNTAG_Int(REGB5)*UNTAG_Int(REGB3));
-      /* ./parser//parser.nit:51 */
+      /* parser/parser.nit:51 */
       REGB6 = TAG_Int(1);
-      /* ./../lib/standard//kernel.nit:215 */
+      /* ../lib/standard/kernel.nit:235 */
       REGB6 = TAG_Int(UNTAG_Int(REGB3)+UNTAG_Int(REGB6));
-      /* ./parser//parser.nit:53 */
-      REGB3 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB6);
-      /* ./../lib/standard//kernel.nit:212 */
+      /* parser/parser.nit:53 */
+      REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB6);
+      REGB7 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+      if (UNTAG_Bool(REGB7)) {
+      } else {
+        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+      }
+      /* ../lib/standard/kernel.nit:232 */
       REGB7 = TAG_Bool(UNTAG_Int(REGB1)<UNTAG_Int(REGB3));
-      /* ./parser//parser.nit:54 */
+      /* parser/parser.nit:54 */
       if (UNTAG_Bool(REGB7)) {
-        /* ./parser//parser.nit:55 */
+        /* parser/parser.nit:55 */
         REGB7 = TAG_Int(1);
-        /* ./../lib/standard//kernel.nit:217 */
+        /* ../lib/standard/kernel.nit:237 */
         REGB7 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB7));
-        /* ./parser//parser.nit:55 */
+        /* parser/parser.nit:55 */
         REGB4 = REGB7;
       } else {
-        /* ./../lib/standard//kernel.nit:214 */
+        REGB7 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB7)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+        }
+        /* ../lib/standard/kernel.nit:234 */
         REGB3 = TAG_Bool(UNTAG_Int(REGB1)>UNTAG_Int(REGB3));
-        /* ./parser//parser.nit:56 */
+        /* parser/parser.nit:56 */
         if (UNTAG_Bool(REGB3)) {
-          /* ./parser//parser.nit:57 */
+          /* parser/parser.nit:57 */
           REGB3 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ../lib/standard/kernel.nit:235 */
           REGB3 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB3));
-          /* ./parser//parser.nit:57 */
+          /* parser/parser.nit:57 */
           REGB2 = REGB3;
         } else {
-          /* ./parser//parser.nit:59 */
+          /* parser/parser.nit:59 */
           REGB3 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ../lib/standard/kernel.nit:235 */
           REGB3 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB3));
-          /* ./parser//parser.nit:59 */
-          REGB3 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
+          /* parser/parser.nit:59 */
+          REGB3 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB3);
           goto label1;
         }
       }
     } else {
-      /* ./parser//parser.nit:49 */
+      /* parser/parser.nit:49 */
       goto label2;
     }
   }
   label2: while(0);
-  /* ./parser//parser.nit:63 */
+  /* parser/parser.nit:63 */
   REGB2 = TAG_Int(2);
-  REGB2 = CALL_tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB2);
+  REGB2 = CALL_parser___tables___TablesCapable___parser_goto(fra.me.REG[0])(fra.me.REG[0], REGB0, REGB2);
   REGB3 = REGB2;
   goto label1;
   label1: while(0);
@@ -243,13 +265,14 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   fra.me.meth = LOCATE_parser___Parser___push;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   REGB0 = p1;
   fra.me.REG[1] = p2;
-  /* ./parser//parser.nit:69 */
+  /* parser/parser.nit:69 */
   REGB1 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
@@ -257,75 +280,90 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
   }
   REGB1 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB2 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:215 */
+  /* ../lib/standard/kernel.nit:235 */
   REGB2 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB2));
-  /* ./parser//parser.nit:70 */
+  /* parser/parser.nit:70 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB2;
-  /* ./parser//parser.nit:71 */
+  /* parser/parser.nit:71 */
   REGB1 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 71);
   }
   fra.me.REG[2] = ATTR_parser___Parser____stack(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:23 */
-  REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+  /* ../lib/standard/collection/array.nit:24 */
+  REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+    nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
   }
-  REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
-  /* ./../lib/standard//kernel.nit:212 */
+  REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+  REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB3)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:232 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-  /* ./parser//parser.nit:71 */
+  /* parser/parser.nit:71 */
   if (UNTAG_Bool(REGB1)) {
-    /* ./parser//parser.nit:72 */
+    /* parser/parser.nit:72 */
     REGB1 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
       nit_abort("Uninitialized attribute %s", "_stack", LOCATE_parser, 72);
     }
     fra.me.REG[2] = ATTR_parser___Parser____stack(fra.me.REG[0]);
-    /* ./../lib/standard//collection//array.nit:245 */
+    /* ../lib/standard/collection/array.nit:280 */
     REGB1 = TAG_Int(0);
-    /* ./../lib/standard//kernel.nit:213 */
+    REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB3)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+    }
+    /* ../lib/standard/kernel.nit:233 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB2)>=UNTAG_Int(REGB1));
-    /* ./../lib/standard//collection//array.nit:245 */
+    /* ../lib/standard/collection/array.nit:280 */
     if (UNTAG_Bool(REGB1)) {
-      REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+      REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
+      }
+      REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+      REGB3 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+      if (UNTAG_Bool(REGB3)) {
+      } else {
+        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
       }
-      REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
-      /* ./../lib/standard//kernel.nit:212 */
+      /* ../lib/standard/kernel.nit:232 */
       REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
     } else {
-      /* ./../lib/standard//collection//array.nit:245 */
+      /* ../lib/standard/collection/array.nit:280 */
       REGB3 = TAG_Bool(false);
       REGB1 = REGB3;
     }
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
+      nit_abort("Assert '%s' failed", "index", LOCATE_standard___collection___array, 280);
     }
-    /* ./../lib/standard//collection//array.nit:246 */
-    fra.me.REG[2] = ATTR_array___Array____items(fra.me.REG[2]);
+    /* ../lib/standard/collection/array.nit:281 */
+    fra.me.REG[2] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
     REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
-      nit_abort("Reciever is null", NULL, LOCATE_array, 246);
+      nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
     }
-    /* ./../lib/standard//collection//array.nit:654 */
+    /* ../lib/standard/collection/array.nit:718 */
     fra.me.REG[2] = ((Nit_NativeArray)fra.me.REG[2])->val[UNTAG_Int(REGB2)];
-    /* ./../lib/standard//collection//array.nit:246 */
+    /* ../lib/standard/collection/array.nit:281 */
     goto label1;
     label1: while(0);
-    /* ./parser//parser.nit:73 */
+    /* parser/parser.nit:73 */
     CALL_parser___State___state__eq(fra.me.REG[2])(fra.me.REG[2], REGB0);
-    /* ./parser//parser.nit:74 */
+    /* parser/parser.nit:74 */
     CALL_parser___State___nodes__eq(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
   } else {
-    /* ./parser//parser.nit:76 */
+    /* parser/parser.nit:76 */
     REGB2 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
     if (UNTAG_Bool(REGB2)) {
     } else {
@@ -333,7 +371,7 @@ void parser___Parser___push(val_t p0, val_t p1, val_t p2){
     }
     fra.me.REG[0] = ATTR_parser___Parser____stack(fra.me.REG[0]);
     fra.me.REG[1] = NEW_State_parser___State___init(REGB0, fra.me.REG[1]);
-    CALL_abstract_collection___Sequence___push(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+    CALL_standard___collection___abstract_collection___Sequence___push(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
   }
   stack_frame_head = fra.me.prev;
   return;
@@ -350,10 +388,11 @@ val_t parser___Parser___state(val_t p0){
   fra.me.meth = LOCATE_parser___Parser___state;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:83 */
+  /* parser/parser.nit:83 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -366,41 +405,51 @@ val_t parser___Parser___state(val_t p0){
     nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 83);
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:245 */
+  /* ../lib/standard/collection/array.nit:280 */
   REGB1 = TAG_Int(0);
-  /* ./../lib/standard//kernel.nit:213 */
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:233 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:245 */
+  /* ../lib/standard/collection/array.nit:280 */
   if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
+    }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
-    /* ./../lib/standard//kernel.nit:212 */
+    /* ../lib/standard/kernel.nit:232 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
   } else {
-    /* ./../lib/standard//collection//array.nit:245 */
+    /* ../lib/standard/collection/array.nit:280 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
+    nit_abort("Assert '%s' failed", "index", LOCATE_standard___collection___array, 280);
   }
-  /* ./../lib/standard//collection//array.nit:246 */
-  fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
+  /* ../lib/standard/collection/array.nit:281 */
+  fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_array, 246);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ./../lib/standard//collection//array.nit:654 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:246 */
+  /* ../lib/standard/collection/array.nit:281 */
   goto label1;
   label1: while(0);
-  /* ./parser//parser.nit:83 */
+  /* parser/parser.nit:83 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
     nit_abort("Reciever is null", NULL, LOCATE_parser, 83);
@@ -423,10 +472,11 @@ val_t parser___Parser___pop(val_t p0){
   fra.me.meth = LOCATE_parser___Parser___pop;
   fra.me.has_broke = 0;
   fra.me.REG_size = 2;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:89 */
+  /* parser/parser.nit:89 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -439,47 +489,57 @@ val_t parser___Parser___pop(val_t p0){
     nit_abort("Uninitialized attribute %s", "_stack_pos", LOCATE_parser, 89);
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
-  /* ./../lib/standard//collection//array.nit:245 */
+  /* ../lib/standard/collection/array.nit:280 */
   REGB1 = TAG_Int(0);
-  /* ./../lib/standard//kernel.nit:213 */
+  REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+  if (UNTAG_Bool(REGB2)) {
+  } else {
+    nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+  }
+  /* ../lib/standard/kernel.nit:233 */
   REGB1 = TAG_Bool(UNTAG_Int(REGB0)>=UNTAG_Int(REGB1));
-  /* ./../lib/standard//collection//array.nit:245 */
+  /* ../lib/standard/collection/array.nit:280 */
   if (UNTAG_Bool(REGB1)) {
-    REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
+    REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1])!=NIT_NULL);
     if (UNTAG_Bool(REGB1)) {
     } else {
-      nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
+      nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
+    }
+    REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[1]);
+    REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+    if (UNTAG_Bool(REGB2)) {
+    } else {
+      nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
     }
-    REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[1]);
-    /* ./../lib/standard//kernel.nit:212 */
+    /* ../lib/standard/kernel.nit:232 */
     REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
   } else {
-    /* ./../lib/standard//collection//array.nit:245 */
+    /* ../lib/standard/collection/array.nit:280 */
     REGB2 = TAG_Bool(false);
     REGB1 = REGB2;
   }
   if (UNTAG_Bool(REGB1)) {
   } else {
-    nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
+    nit_abort("Assert '%s' failed", "index", LOCATE_standard___collection___array, 280);
   }
-  /* ./../lib/standard//collection//array.nit:246 */
-  fra.me.REG[1] = ATTR_array___Array____items(fra.me.REG[1]);
+  /* ../lib/standard/collection/array.nit:281 */
+  fra.me.REG[1] = ATTR_standard___collection___array___Array____items(fra.me.REG[1]);
   REGB1 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB1)) {
-    nit_abort("Reciever is null", NULL, LOCATE_array, 246);
+    nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
   }
-  /* ./../lib/standard//collection//array.nit:654 */
+  /* ../lib/standard/collection/array.nit:718 */
   fra.me.REG[1] = ((Nit_NativeArray)fra.me.REG[1])->val[UNTAG_Int(REGB0)];
-  /* ./../lib/standard//collection//array.nit:246 */
+  /* ../lib/standard/collection/array.nit:281 */
   goto label1;
   label1: while(0);
-  /* ./parser//parser.nit:89 */
+  /* parser/parser.nit:89 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
     nit_abort("Reciever is null", NULL, LOCATE_parser, 89);
   }
   fra.me.REG[1] = CALL_parser___State___nodes(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:90 */
+  /* parser/parser.nit:90 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____stack_pos(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -487,11 +547,11 @@ val_t parser___Parser___pop(val_t p0){
   }
   REGB0 = ATTR_parser___Parser____stack_pos(fra.me.REG[0]);
   REGB1 = TAG_Int(1);
-  /* ./../lib/standard//kernel.nit:217 */
+  /* ../lib/standard/kernel.nit:237 */
   REGB1 = TAG_Int(UNTAG_Int(REGB0)-UNTAG_Int(REGB1));
-  /* ./parser//parser.nit:90 */
+  /* parser/parser.nit:90 */
   ATTR_parser___Parser____stack_pos(fra.me.REG[0]) = REGB1;
-  /* ./parser//parser.nit:91 */
+  /* parser/parser.nit:91 */
   goto label2;
   label2: while(0);
   stack_frame_head = fra.me.prev;
@@ -510,12 +570,14 @@ val_t parser___Parser___parse(val_t p0){
   val_t REGB8;
   val_t tmp;
             static val_t once_value_4; /* Once value */
+            static val_t once_value_5; /* Once value */
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
   fra.me.line = 94;
   fra.me.meth = LOCATE_parser___Parser___parse;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -523,252 +585,292 @@ val_t parser___Parser___parse(val_t p0){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:97 */
+  /* parser/parser.nit:97 */
   REGB0 = TAG_Int(0);
   CALL_parser___Parser___push(fra.me.REG[0])(fra.me.REG[0], REGB0, NIT_NULL);
-  /* ./parser//parser.nit:99 */
+  /* parser/parser.nit:99 */
   REGB0 = TAG_Bool(ATTR_parser___Parser____lexer(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
     nit_abort("Uninitialized attribute %s", "_lexer", LOCATE_parser, 99);
   }
   fra.me.REG[1] = ATTR_parser___Parser____lexer(fra.me.REG[0]);
-  /* ./parser//parser.nit:100 */
+  /* parser/parser.nit:100 */
   while(1) {
-    /* ./parser//parser.nit:101 */
-    fra.me.REG[2] = CALL_lexer___Lexer___peek(fra.me.REG[1])(fra.me.REG[1]);
-    /* ./parser//parser.nit:102 */
-    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_AError, ID_AError)) /*cast AError*/;
+    /* parser/parser.nit:101 */
+    fra.me.REG[2] = CALL_parser___lexer___Lexer___peek(fra.me.REG[1])(fra.me.REG[1]);
+    /* parser/parser.nit:102 */
+    REGB0 = TAG_Bool(VAL_ISA(fra.me.REG[2], COLOR_parser___parser_nodes___AError, ID_parser___parser_nodes___AError)) /*cast AError*/;
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser.nit:103 */
-      fra.me.REG[3] = NEW_Start_parser_prod___Start___init(NIT_NULL, fra.me.REG[2]);
+      /* parser/parser.nit:103 */
+      fra.me.REG[3] = NEW_Start_parser___parser_nodes___Start___init(NIT_NULL, fra.me.REG[2]);
       goto label1;
     }
-    /* ./parser//parser.nit:106 */
-    REGB0 = CALL_lexer___Token___parser_index(fra.me.REG[2])(fra.me.REG[2]);
-    /* ./parser//parser.nit:107 */
+    /* parser/parser.nit:106 */
+    REGB0 = CALL_parser___lexer___Token___parser_index(fra.me.REG[2])(fra.me.REG[2]);
+    /* parser/parser.nit:107 */
     REGB1 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
     REGB2 = TAG_Int(2);
-    REGB2 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB2);
-    /* ./parser//parser.nit:108 */
+    REGB2 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB2);
+    /* parser/parser.nit:108 */
     REGB1 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
     REGB3 = TAG_Int(3);
-    REGB3 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB3);
-    /* ./parser//parser.nit:110 */
+    REGB3 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB1, REGB3);
+    /* parser/parser.nit:110 */
     REGB1 = TAG_Int(1);
-    /* ./parser//parser.nit:111 */
+    /* parser/parser.nit:111 */
     REGB4 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
     REGB5 = TAG_Int(0);
-    REGB5 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB4, REGB5);
+    REGB5 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB4, REGB5);
     REGB4 = TAG_Int(1);
-    /* ./../lib/standard//kernel.nit:217 */
+    /* ../lib/standard/kernel.nit:237 */
     REGB4 = TAG_Int(UNTAG_Int(REGB5)-UNTAG_Int(REGB4));
-    /* ./parser//parser.nit:113 */
+    /* parser/parser.nit:113 */
     while(1) {
-      /* ./../lib/standard//kernel.nit:211 */
+      REGB5 = TAG_Bool(VAL_ISA(REGB4, VTCOLOR_standard___kernel___Comparable___OTHER(REGB1), VTID_standard___kernel___Comparable___OTHER(REGB1))) /*cast OTHER*/;
+      if (UNTAG_Bool(REGB5)) {
+      } else {
+        nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+      }
+      /* ../lib/standard/kernel.nit:231 */
       REGB5 = TAG_Bool(UNTAG_Int(REGB1)<=UNTAG_Int(REGB4));
-      /* ./parser//parser.nit:113 */
+      /* parser/parser.nit:113 */
       if (UNTAG_Bool(REGB5)) {
-        /* ./../lib/standard//kernel.nit:215 */
+        /* ../lib/standard/kernel.nit:235 */
         REGB5 = TAG_Int(UNTAG_Int(REGB1)+UNTAG_Int(REGB4));
-        /* ./parser//parser.nit:114 */
+        /* parser/parser.nit:114 */
         REGB6 = TAG_Int(2);
-        /* ./../lib/standard//kernel.nit:219 */
+        /* ../lib/standard/kernel.nit:239 */
         REGB6 = TAG_Int(UNTAG_Int(REGB5)/UNTAG_Int(REGB6));
-        /* ./parser//parser.nit:115 */
+        /* parser/parser.nit:115 */
         REGB5 = TAG_Int(3);
-        /* ./../lib/standard//kernel.nit:218 */
+        /* ../lib/standard/kernel.nit:238 */
         REGB5 = TAG_Int(UNTAG_Int(REGB6)*UNTAG_Int(REGB5));
-        /* ./parser//parser.nit:115 */
+        /* parser/parser.nit:115 */
         REGB7 = TAG_Int(1);
-        /* ./../lib/standard//kernel.nit:215 */
+        /* ../lib/standard/kernel.nit:235 */
         REGB7 = TAG_Int(UNTAG_Int(REGB5)+UNTAG_Int(REGB7));
-        /* ./parser//parser.nit:117 */
+        /* parser/parser.nit:117 */
         REGB5 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
-        REGB5 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB7);
-        /* ./../lib/standard//kernel.nit:212 */
+        REGB5 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB7);
+        REGB8 = TAG_Bool(VAL_ISA(REGB5, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB8)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+        }
+        /* ../lib/standard/kernel.nit:232 */
         REGB8 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB5));
-        /* ./parser//parser.nit:118 */
+        /* parser/parser.nit:118 */
         if (UNTAG_Bool(REGB8)) {
-          /* ./parser//parser.nit:119 */
+          /* parser/parser.nit:119 */
           REGB8 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:217 */
+          /* ../lib/standard/kernel.nit:237 */
           REGB8 = TAG_Int(UNTAG_Int(REGB6)-UNTAG_Int(REGB8));
-          /* ./parser//parser.nit:119 */
+          /* parser/parser.nit:119 */
           REGB4 = REGB8;
         } else {
-          /* ./../lib/standard//kernel.nit:214 */
+          REGB8 = TAG_Bool(VAL_ISA(REGB5, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB8)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+          }
+          /* ../lib/standard/kernel.nit:234 */
           REGB5 = TAG_Bool(UNTAG_Int(REGB0)>UNTAG_Int(REGB5));
-          /* ./parser//parser.nit:120 */
+          /* parser/parser.nit:120 */
           if (UNTAG_Bool(REGB5)) {
-            /* ./parser//parser.nit:121 */
+            /* parser/parser.nit:121 */
             REGB5 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:215 */
+            /* ../lib/standard/kernel.nit:235 */
             REGB5 = TAG_Int(UNTAG_Int(REGB6)+UNTAG_Int(REGB5));
-            /* ./parser//parser.nit:121 */
+            /* parser/parser.nit:121 */
             REGB1 = REGB5;
           } else {
-            /* ./parser//parser.nit:123 */
+            /* parser/parser.nit:123 */
             REGB5 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
             REGB6 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:215 */
+            /* ../lib/standard/kernel.nit:235 */
             REGB6 = TAG_Int(UNTAG_Int(REGB7)+UNTAG_Int(REGB6));
-            /* ./parser//parser.nit:123 */
-            REGB6 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB6);
+            /* parser/parser.nit:123 */
+            REGB6 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB5, REGB6);
             REGB2 = REGB6;
-            /* ./parser//parser.nit:124 */
+            /* parser/parser.nit:124 */
             REGB6 = CALL_parser___Parser___state(fra.me.REG[0])(fra.me.REG[0]);
             REGB5 = TAG_Int(2);
-            /* ./../lib/standard//kernel.nit:215 */
+            /* ../lib/standard/kernel.nit:235 */
             REGB5 = TAG_Int(UNTAG_Int(REGB7)+UNTAG_Int(REGB5));
-            /* ./parser//parser.nit:124 */
-            REGB5 = CALL_tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB6, REGB5);
+            /* parser/parser.nit:124 */
+            REGB5 = CALL_parser___tables___TablesCapable___parser_action(fra.me.REG[0])(fra.me.REG[0], REGB6, REGB5);
             REGB3 = REGB5;
-            /* ./parser//parser.nit:125 */
+            /* parser/parser.nit:125 */
             goto label2;
           }
         }
       } else {
-        /* ./parser//parser.nit:113 */
+        /* parser/parser.nit:113 */
         goto label2;
       }
     }
     label2: while(0);
-    /* ./parser//parser.nit:129 */
+    /* parser/parser.nit:129 */
     REGB1 = TAG_Int(0);
     REGB0 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
     if (UNTAG_Bool(REGB0)) {
     } else {
-      /* ./../lib/standard//kernel.nit:207 */
+      /* ../lib/standard/kernel.nit:227 */
       REGB1 = TAG_Bool((REGB2)==(REGB1));
-      /* ./parser//parser.nit:129 */
+      /* parser/parser.nit:129 */
       REGB0 = REGB1;
     }
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser.nit:130 */
-      fra.me.REG[4] = CALL_lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
+      /* parser/parser.nit:130 */
+      fra.me.REG[4] = CALL_parser___lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
       CALL_parser___Parser___push(fra.me.REG[0])(fra.me.REG[0], REGB3, fra.me.REG[4]);
     } else {
-      /* ./parser//parser.nit:131 */
+      /* parser/parser.nit:131 */
       REGB0 = TAG_Int(1);
       REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB0));
       if (UNTAG_Bool(REGB1)) {
       } else {
-        /* ./../lib/standard//kernel.nit:207 */
+        /* ../lib/standard/kernel.nit:227 */
         REGB0 = TAG_Bool((REGB2)==(REGB0));
-        /* ./parser//parser.nit:131 */
+        /* parser/parser.nit:131 */
         REGB1 = REGB0;
       }
       if (UNTAG_Bool(REGB1)) {
-        /* ./parser//parser.nit:132 */
+        /* parser/parser.nit:132 */
         REGB1 = TAG_Bool(ATTR_parser___Parser____reduce_table(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
           nit_abort("Uninitialized attribute %s", "_reduce_table", LOCATE_parser, 132);
         }
         fra.me.REG[4] = ATTR_parser___Parser____reduce_table(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:245 */
+        /* ../lib/standard/collection/array.nit:280 */
         REGB1 = TAG_Int(0);
-        /* ./../lib/standard//kernel.nit:213 */
+        REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB0)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+        }
+        /* ../lib/standard/kernel.nit:233 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB3)>=UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:245 */
+        /* ../lib/standard/collection/array.nit:280 */
         if (UNTAG_Bool(REGB1)) {
-          REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 245);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 280);
           }
-          REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-          /* ./../lib/standard//kernel.nit:212 */
+          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+          REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB3), VTID_standard___kernel___Comparable___OTHER(REGB3))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+          }
+          /* ../lib/standard/kernel.nit:232 */
           REGB1 = TAG_Bool(UNTAG_Int(REGB3)<UNTAG_Int(REGB1));
         } else {
-          /* ./../lib/standard//collection//array.nit:245 */
+          /* ../lib/standard/collection/array.nit:280 */
           REGB0 = TAG_Bool(false);
           REGB1 = REGB0;
         }
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Assert %s  failed", "'index'", LOCATE_array, 245);
+          nit_abort("Assert '%s' failed", "index", LOCATE_standard___collection___array, 280);
         }
-        /* ./../lib/standard//collection//array.nit:246 */
-        fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[4]);
+        /* ../lib/standard/collection/array.nit:281 */
+        fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
         REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
-          nit_abort("Reciever is null", NULL, LOCATE_array, 246);
+          nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 281);
         }
-        /* ./../lib/standard//collection//array.nit:654 */
+        /* ../lib/standard/collection/array.nit:718 */
         fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB3)];
-        /* ./../lib/standard//collection//array.nit:246 */
+        /* ../lib/standard/collection/array.nit:281 */
         goto label3;
         label3: while(0);
-        /* ./parser//parser.nit:132 */
+        /* parser/parser.nit:132 */
         REGB3 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
           nit_abort("Reciever is null", NULL, LOCATE_parser, 132);
         }
         CALL_parser___ReduceAction___action(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[0]);
       } else {
-        /* ./parser//parser.nit:133 */
+        /* parser/parser.nit:133 */
         REGB3 = TAG_Int(2);
         REGB1 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB3));
         if (UNTAG_Bool(REGB1)) {
         } else {
-          /* ./../lib/standard//kernel.nit:207 */
+          /* ../lib/standard/kernel.nit:227 */
           REGB3 = TAG_Bool((REGB2)==(REGB3));
-          /* ./parser//parser.nit:133 */
+          /* parser/parser.nit:133 */
           REGB1 = REGB3;
         }
         if (UNTAG_Bool(REGB1)) {
-          /* ./parser//parser.nit:134 */
-          fra.me.REG[4] = CALL_lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
-          /* ./parser//parser.nit:135 */
-          REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_EOF, ID_EOF)) /*cast EOF*/;
+          /* parser/parser.nit:134 */
+          fra.me.REG[4] = CALL_parser___lexer___Lexer___next(fra.me.REG[1])(fra.me.REG[1]);
+          /* parser/parser.nit:135 */
+          REGB1 = TAG_Bool(VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___EOF, ID_parser___parser_nodes___EOF)) /*cast EOF*/;
           if (UNTAG_Bool(REGB1)) {
           } else {
             nit_abort("Assert failed", NULL, LOCATE_parser, 135);
           }
-          /* ./parser//parser.nit:136 */
+          /* parser/parser.nit:136 */
           fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[0])(fra.me.REG[0]);
-          /* ./parser//parser.nit:137 */
-          REGB1 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_AModule, ID_AModule)) /*cast AModule*/;
+          /* parser/parser.nit:137 */
+          REGB1 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModule, ID_parser___parser_nodes___AModule)) /*cast AModule*/;
           if (UNTAG_Bool(REGB1)) {
           } else {
             nit_abort("Assert failed", NULL, LOCATE_parser, 137);
           }
-          /* ./parser//parser.nit:138 */
-          fra.me.REG[4] = NEW_Start_parser_prod___Start___init(fra.me.REG[5], fra.me.REG[4]);
-          /* ./parser//parser.nit:139 */
+          /* parser/parser.nit:138 */
+          fra.me.REG[4] = NEW_Start_parser___parser_nodes___Start___init(fra.me.REG[5], fra.me.REG[4]);
+          /* parser/parser.nit:139 */
           fra.me.REG[5] = NEW_ComputeProdLocationVisitor_parser___ComputeProdLocationVisitor___init();
-          CALL_parser_prod___Visitor___enter_visit(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
-          /* ./parser//parser.nit:140 */
+          CALL_parser___parser_prod___Visitor___enter_visit(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+          /* parser/parser.nit:140 */
           fra.me.REG[3] = fra.me.REG[4];
           goto label1;
         } else {
-          /* ./parser//parser.nit:141 */
+          /* parser/parser.nit:141 */
           REGB1 = TAG_Int(3);
           REGB3 = TAG_Bool(IS_EQUAL_OO(REGB2,REGB1));
           if (UNTAG_Bool(REGB3)) {
           } else {
-            /* ./../lib/standard//kernel.nit:207 */
+            /* ../lib/standard/kernel.nit:227 */
             REGB1 = TAG_Bool((REGB2)==(REGB1));
-            /* ./parser//parser.nit:141 */
+            /* parser/parser.nit:141 */
             REGB3 = REGB1;
           }
           if (UNTAG_Bool(REGB3)) {
-            /* ./parser//parser.nit:142 */
+            /* parser/parser.nit:142 */
+            REGB3 = TAG_Int(3);
+            fra.me.REG[4] = NEW_Array_standard___collection___array___Array___with_capacity(REGB3);
             if (!once_value_4) {
-              fra.me.REG[4] = BOX_NativeString("Syntax error: unexpected token.");
-              REGB3 = TAG_Int(31);
-              fra.me.REG[4] = NEW_String_string___String___with_native(fra.me.REG[4], REGB3);
-              once_value_4 = fra.me.REG[4];
+              fra.me.REG[5] = BOX_NativeString("Syntax error: unexpected ");
+              REGB3 = TAG_Int(25);
+              fra.me.REG[5] = NEW_String_standard___string___String___with_native(fra.me.REG[5], REGB3);
+              once_value_4 = fra.me.REG[5];
               register_static_object(&once_value_4);
-            } else fra.me.REG[4] = once_value_4;
-            fra.me.REG[4] = fra.me.REG[4];
-            fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
-            fra.me.REG[2] = NEW_AError_lexer___AError___init_error(fra.me.REG[4], fra.me.REG[2]);
-            /* ./parser//parser.nit:143 */
-            fra.me.REG[2] = NEW_Start_parser_prod___Start___init(NIT_NULL, fra.me.REG[2]);
-            /* ./parser//parser.nit:144 */
+            } else fra.me.REG[5] = once_value_4;
+            fra.me.REG[5] = fra.me.REG[5];
+            CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+            fra.me.REG[5] = CALL_standard___string___Object___to_s(fra.me.REG[2])(fra.me.REG[2]);
+            CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+            if (!once_value_5) {
+              fra.me.REG[5] = BOX_NativeString(".");
+              REGB3 = TAG_Int(1);
+              fra.me.REG[5] = NEW_String_standard___string___String___with_native(fra.me.REG[5], REGB3);
+              once_value_5 = fra.me.REG[5];
+              register_static_object(&once_value_5);
+            } else fra.me.REG[5] = once_value_5;
+            fra.me.REG[5] = fra.me.REG[5];
+            CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[5]);
+            fra.me.REG[4] = CALL_standard___string___Object___to_s(fra.me.REG[4])(fra.me.REG[4]);
+            fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[2])(fra.me.REG[2]);
+            fra.me.REG[2] = NEW_AError_parser___lexer___AError___init_error(fra.me.REG[4], fra.me.REG[2]);
+            /* parser/parser.nit:143 */
+            fra.me.REG[2] = NEW_Start_parser___parser_nodes___Start___init(NIT_NULL, fra.me.REG[2]);
+            /* parser/parser.nit:144 */
             fra.me.REG[3] = fra.me.REG[2];
             goto label1;
           }
@@ -790,3589 +892,3795 @@ void parser___Parser___build_reduce_table(val_t p0){
   fra.me.meth = LOCATE_parser___Parser___build_reduce_table;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:152 */
-  REGB0 = TAG_Int(714);
-  fra.me.REG[1] = NEW_Array_array___Array___with_capacity(REGB0);
-  /* ./parser//parser.nit:153 */
+  /* parser/parser.nit:152 */
+  REGB0 = TAG_Int(755);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_capacity(REGB0);
+  /* parser/parser.nit:153 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction0_parser___ReduceAction0___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:154 */
+  fra.me.REG[2] = NEW_ReduceAction0_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:154 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction1_parser___ReduceAction1___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:155 */
+  fra.me.REG[2] = NEW_ReduceAction1_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:155 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction2_parser___ReduceAction2___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:156 */
+  fra.me.REG[2] = NEW_ReduceAction2_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:156 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction3_parser___ReduceAction3___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:157 */
+  fra.me.REG[2] = NEW_ReduceAction3_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:157 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction4_parser___ReduceAction4___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:158 */
+  fra.me.REG[2] = NEW_ReduceAction4_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:158 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction5_parser___ReduceAction5___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:159 */
+  fra.me.REG[2] = NEW_ReduceAction5_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:159 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction6_parser___ReduceAction6___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:160 */
+  fra.me.REG[2] = NEW_ReduceAction6_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:160 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction7_parser___ReduceAction7___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:161 */
+  fra.me.REG[2] = NEW_ReduceAction7_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:161 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction8_parser___ReduceAction8___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:162 */
+  fra.me.REG[2] = NEW_ReduceAction8_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:162 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction9_parser___ReduceAction9___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:163 */
+  fra.me.REG[2] = NEW_ReduceAction9_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:163 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction10_parser___ReduceAction10___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:164 */
+  fra.me.REG[2] = NEW_ReduceAction10_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:164 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction11_parser___ReduceAction11___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:165 */
+  fra.me.REG[2] = NEW_ReduceAction11_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:165 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction12_parser___ReduceAction12___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:166 */
+  fra.me.REG[2] = NEW_ReduceAction12_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:166 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction13_parser___ReduceAction13___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:167 */
+  fra.me.REG[2] = NEW_ReduceAction13_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:167 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction14_parser___ReduceAction14___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:168 */
+  fra.me.REG[2] = NEW_ReduceAction14_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:168 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction15_parser___ReduceAction15___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:169 */
+  fra.me.REG[2] = NEW_ReduceAction15_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:169 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction16_parser___ReduceAction16___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:170 */
+  fra.me.REG[2] = NEW_ReduceAction16_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:170 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction17_parser___ReduceAction17___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:171 */
+  fra.me.REG[2] = NEW_ReduceAction17_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:171 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction18_parser___ReduceAction18___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:172 */
+  fra.me.REG[2] = NEW_ReduceAction18_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:172 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction19_parser___ReduceAction19___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:173 */
+  fra.me.REG[2] = NEW_ReduceAction19_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:173 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction20_parser___ReduceAction20___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:174 */
+  fra.me.REG[2] = NEW_ReduceAction20_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:174 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction21_parser___ReduceAction21___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:175 */
+  fra.me.REG[2] = NEW_ReduceAction21_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:175 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction22_parser___ReduceAction22___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:176 */
+  fra.me.REG[2] = NEW_ReduceAction22_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:176 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction23_parser___ReduceAction23___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:177 */
+  fra.me.REG[2] = NEW_ReduceAction23_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:177 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction24_parser___ReduceAction24___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:178 */
+  fra.me.REG[2] = NEW_ReduceAction24_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:178 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction25_parser___ReduceAction25___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:179 */
+  fra.me.REG[2] = NEW_ReduceAction25_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:179 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction26_parser___ReduceAction26___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:180 */
+  fra.me.REG[2] = NEW_ReduceAction26_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:180 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction27_parser___ReduceAction27___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:181 */
+  fra.me.REG[2] = NEW_ReduceAction27_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:181 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction28_parser___ReduceAction28___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:182 */
+  fra.me.REG[2] = NEW_ReduceAction28_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:182 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction29_parser___ReduceAction29___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:183 */
+  fra.me.REG[2] = NEW_ReduceAction29_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:183 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction30_parser___ReduceAction30___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:184 */
+  fra.me.REG[2] = NEW_ReduceAction30_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:184 */
   REGB0 = TAG_Int(0);
-  fra.me.REG[2] = NEW_ReduceAction31_parser___ReduceAction31___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:185 */
+  fra.me.REG[2] = NEW_ReduceAction31_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:185 */
   REGB0 = TAG_Int(1);
-  fra.me.REG[2] = NEW_ReduceAction32_parser___ReduceAction32___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:186 */
+  fra.me.REG[2] = NEW_ReduceAction32_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:186 */
   REGB0 = TAG_Int(2);
-  fra.me.REG[2] = NEW_ReduceAction33_parser___ReduceAction33___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:187 */
+  fra.me.REG[2] = NEW_ReduceAction33_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:187 */
   REGB0 = TAG_Int(2);
-  fra.me.REG[2] = NEW_ReduceAction34_parser___ReduceAction34___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:188 */
+  fra.me.REG[2] = NEW_ReduceAction34_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:188 */
   REGB0 = TAG_Int(3);
-  fra.me.REG[2] = NEW_ReduceAction35_parser___ReduceAction35___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:189 */
+  fra.me.REG[2] = NEW_ReduceAction35_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:189 */
   REGB0 = TAG_Int(3);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:190 */
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:190 */
   REGB0 = TAG_Int(4);
-  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction37___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:191 */
+  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:191 */
   REGB0 = TAG_Int(4);
-  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction37___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:192 */
+  fra.me.REG[2] = NEW_ReduceAction37_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:192 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction39_parser___ReduceAction39___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:193 */
+  fra.me.REG[2] = NEW_ReduceAction39_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:193 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction40_parser___ReduceAction40___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:194 */
+  fra.me.REG[2] = NEW_ReduceAction40_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:194 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction41_parser___ReduceAction41___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:195 */
+  fra.me.REG[2] = NEW_ReduceAction41_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:195 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction42_parser___ReduceAction42___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:196 */
+  fra.me.REG[2] = NEW_ReduceAction42_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:196 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction43_parser___ReduceAction43___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:197 */
+  fra.me.REG[2] = NEW_ReduceAction43_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:197 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction44_parser___ReduceAction44___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:198 */
+  fra.me.REG[2] = NEW_ReduceAction44_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:198 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction45_parser___ReduceAction45___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:199 */
+  fra.me.REG[2] = NEW_ReduceAction45_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:199 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction46_parser___ReduceAction46___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:200 */
+  fra.me.REG[2] = NEW_ReduceAction46_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:200 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction47_parser___ReduceAction47___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:201 */
+  fra.me.REG[2] = NEW_ReduceAction47_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:201 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction48_parser___ReduceAction48___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:202 */
+  fra.me.REG[2] = NEW_ReduceAction48_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:202 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction49_parser___ReduceAction49___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:203 */
+  fra.me.REG[2] = NEW_ReduceAction49_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:203 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction50_parser___ReduceAction50___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:204 */
+  fra.me.REG[2] = NEW_ReduceAction50_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:204 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction51_parser___ReduceAction51___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:205 */
+  fra.me.REG[2] = NEW_ReduceAction51_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:205 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction52_parser___ReduceAction52___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:206 */
+  fra.me.REG[2] = NEW_ReduceAction52_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:206 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction53_parser___ReduceAction53___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:207 */
+  fra.me.REG[2] = NEW_ReduceAction53_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:207 */
   REGB0 = TAG_Int(5);
-  fra.me.REG[2] = NEW_ReduceAction54_parser___ReduceAction54___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:208 */
+  fra.me.REG[2] = NEW_ReduceAction54_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:208 */
   REGB0 = TAG_Int(6);
-  fra.me.REG[2] = NEW_ReduceAction55_parser___ReduceAction55___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:209 */
+  fra.me.REG[2] = NEW_ReduceAction55_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:209 */
   REGB0 = TAG_Int(6);
-  fra.me.REG[2] = NEW_ReduceAction56_parser___ReduceAction56___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:210 */
+  fra.me.REG[2] = NEW_ReduceAction56_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:210 */
   REGB0 = TAG_Int(6);
-  fra.me.REG[2] = NEW_ReduceAction57_parser___ReduceAction57___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:211 */
+  fra.me.REG[2] = NEW_ReduceAction57_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:211 */
   REGB0 = TAG_Int(6);
-  fra.me.REG[2] = NEW_ReduceAction58_parser___ReduceAction58___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:212 */
+  fra.me.REG[2] = NEW_ReduceAction58_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:212 */
+  REGB0 = TAG_Int(6);
+  fra.me.REG[2] = NEW_ReduceAction59_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:213 */
   REGB0 = TAG_Int(7);
-  fra.me.REG[2] = NEW_ReduceAction59_parser___ReduceAction59___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:213 */
+  fra.me.REG[2] = NEW_ReduceAction60_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:214 */
   REGB0 = TAG_Int(7);
-  fra.me.REG[2] = NEW_ReduceAction60_parser___ReduceAction60___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:214 */
+  fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:215 */
   REGB0 = TAG_Int(8);
-  fra.me.REG[2] = NEW_ReduceAction61_parser___ReduceAction61___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:215 */
+  fra.me.REG[2] = NEW_ReduceAction62_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:216 */
   REGB0 = TAG_Int(9);
-  fra.me.REG[2] = NEW_ReduceAction62_parser___ReduceAction62___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:216 */
+  fra.me.REG[2] = NEW_ReduceAction63_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:217 */
   REGB0 = TAG_Int(9);
-  fra.me.REG[2] = NEW_ReduceAction63_parser___ReduceAction63___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:217 */
+  fra.me.REG[2] = NEW_ReduceAction64_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:218 */
   REGB0 = TAG_Int(10);
-  fra.me.REG[2] = NEW_ReduceAction64_parser___ReduceAction64___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:218 */
+  fra.me.REG[2] = NEW_ReduceAction65_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:219 */
   REGB0 = TAG_Int(10);
-  fra.me.REG[2] = NEW_ReduceAction65_parser___ReduceAction65___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:219 */
+  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:220 */
   REGB0 = TAG_Int(11);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:220 */
+  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:221 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:222 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:223 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:224 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:225 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:226 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:227 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction74_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:228 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction75_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:229 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction76_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:230 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:221 */
+  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:231 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:222 */
+  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:232 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:223 */
+  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:233 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction70___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:224 */
+  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:234 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:225 */
+  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:235 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:226 */
+  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:236 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction73___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:227 */
+  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:237 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction74_parser___ReduceAction74___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:228 */
+  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:238 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction75_parser___ReduceAction75___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:229 */
+  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:239 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction76_parser___ReduceAction76___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:230 */
+  fra.me.REG[2] = NEW_ReduceAction86_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:240 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction77___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:231 */
+  fra.me.REG[2] = NEW_ReduceAction87_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:241 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:232 */
+  fra.me.REG[2] = NEW_ReduceAction88_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:242 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:233 */
+  fra.me.REG[2] = NEW_ReduceAction89_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:243 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:234 */
+  fra.me.REG[2] = NEW_ReduceAction90_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:244 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction81___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:235 */
+  fra.me.REG[2] = NEW_ReduceAction91_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:245 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction82___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:236 */
+  fra.me.REG[2] = NEW_ReduceAction92_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:246 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction83___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:237 */
+  fra.me.REG[2] = NEW_ReduceAction93_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:247 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction84___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:238 */
+  fra.me.REG[2] = NEW_ReduceAction94_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:248 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction85___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:239 */
+  fra.me.REG[2] = NEW_ReduceAction95_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:249 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction86_parser___ReduceAction86___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:240 */
+  fra.me.REG[2] = NEW_ReduceAction96_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:250 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction87_parser___ReduceAction87___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:241 */
+  fra.me.REG[2] = NEW_ReduceAction97_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:251 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction88_parser___ReduceAction88___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:242 */
+  fra.me.REG[2] = NEW_ReduceAction98_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:252 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction89_parser___ReduceAction89___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:243 */
+  fra.me.REG[2] = NEW_ReduceAction99_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:253 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction90_parser___ReduceAction90___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:244 */
+  fra.me.REG[2] = NEW_ReduceAction100_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:254 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction91_parser___ReduceAction91___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:245 */
+  fra.me.REG[2] = NEW_ReduceAction101_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:255 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction92_parser___ReduceAction92___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:246 */
+  fra.me.REG[2] = NEW_ReduceAction102_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:256 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction93_parser___ReduceAction93___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:247 */
+  fra.me.REG[2] = NEW_ReduceAction103_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:257 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction94_parser___ReduceAction94___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:248 */
+  fra.me.REG[2] = NEW_ReduceAction104_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:258 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction95_parser___ReduceAction95___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:249 */
+  fra.me.REG[2] = NEW_ReduceAction105_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:259 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction96_parser___ReduceAction96___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:250 */
+  fra.me.REG[2] = NEW_ReduceAction106_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:260 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction97_parser___ReduceAction97___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:251 */
+  fra.me.REG[2] = NEW_ReduceAction107_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:261 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction98_parser___ReduceAction98___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:252 */
+  fra.me.REG[2] = NEW_ReduceAction108_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:262 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction99_parser___ReduceAction99___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:253 */
+  fra.me.REG[2] = NEW_ReduceAction109_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:263 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction100_parser___ReduceAction100___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:254 */
+  fra.me.REG[2] = NEW_ReduceAction110_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:264 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction101_parser___ReduceAction101___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:255 */
+  fra.me.REG[2] = NEW_ReduceAction111_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:265 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction102_parser___ReduceAction102___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:256 */
+  fra.me.REG[2] = NEW_ReduceAction112_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:266 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction103_parser___ReduceAction103___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:257 */
+  fra.me.REG[2] = NEW_ReduceAction113_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:267 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction104_parser___ReduceAction104___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:258 */
+  fra.me.REG[2] = NEW_ReduceAction114_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:268 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction105_parser___ReduceAction105___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:259 */
+  fra.me.REG[2] = NEW_ReduceAction115_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:269 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction106_parser___ReduceAction106___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:260 */
+  fra.me.REG[2] = NEW_ReduceAction116_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:270 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction107_parser___ReduceAction107___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:261 */
+  fra.me.REG[2] = NEW_ReduceAction117_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:271 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction108_parser___ReduceAction108___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:262 */
+  fra.me.REG[2] = NEW_ReduceAction118_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:272 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction109_parser___ReduceAction109___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:263 */
+  fra.me.REG[2] = NEW_ReduceAction119_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:273 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction110_parser___ReduceAction110___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:264 */
+  fra.me.REG[2] = NEW_ReduceAction120_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:274 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction111_parser___ReduceAction111___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:265 */
+  fra.me.REG[2] = NEW_ReduceAction121_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:275 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction112_parser___ReduceAction112___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:266 */
+  fra.me.REG[2] = NEW_ReduceAction122_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:276 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction113_parser___ReduceAction113___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:267 */
+  fra.me.REG[2] = NEW_ReduceAction123_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:277 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction114_parser___ReduceAction114___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:268 */
+  fra.me.REG[2] = NEW_ReduceAction124_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:278 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction115_parser___ReduceAction115___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:269 */
+  fra.me.REG[2] = NEW_ReduceAction125_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:279 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction116_parser___ReduceAction116___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:270 */
+  fra.me.REG[2] = NEW_ReduceAction126_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:280 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction117_parser___ReduceAction117___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:271 */
+  fra.me.REG[2] = NEW_ReduceAction127_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:281 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction118_parser___ReduceAction118___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:272 */
+  fra.me.REG[2] = NEW_ReduceAction128_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:282 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction119_parser___ReduceAction119___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:273 */
+  fra.me.REG[2] = NEW_ReduceAction129_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:283 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction120_parser___ReduceAction120___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:274 */
+  fra.me.REG[2] = NEW_ReduceAction130_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:284 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction121_parser___ReduceAction121___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:275 */
+  fra.me.REG[2] = NEW_ReduceAction131_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:285 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction122_parser___ReduceAction122___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:276 */
+  fra.me.REG[2] = NEW_ReduceAction132_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:286 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction123_parser___ReduceAction123___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:277 */
+  fra.me.REG[2] = NEW_ReduceAction133_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:287 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction124_parser___ReduceAction124___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:278 */
+  fra.me.REG[2] = NEW_ReduceAction134_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:288 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction125_parser___ReduceAction125___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:279 */
+  fra.me.REG[2] = NEW_ReduceAction135_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:289 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction126_parser___ReduceAction126___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:280 */
+  fra.me.REG[2] = NEW_ReduceAction136_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:290 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction127_parser___ReduceAction127___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:281 */
+  fra.me.REG[2] = NEW_ReduceAction137_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:291 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction128_parser___ReduceAction128___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:282 */
+  fra.me.REG[2] = NEW_ReduceAction138_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:292 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction129_parser___ReduceAction129___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:283 */
+  fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:293 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction130_parser___ReduceAction130___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:284 */
+  fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:294 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction131_parser___ReduceAction131___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:285 */
+  fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:295 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction132_parser___ReduceAction132___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:286 */
+  fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:296 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction133_parser___ReduceAction133___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:287 */
+  fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:297 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction134_parser___ReduceAction134___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:288 */
+  fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:298 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction135_parser___ReduceAction135___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:289 */
+  fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:299 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction136_parser___ReduceAction136___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:290 */
+  fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:300 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction137_parser___ReduceAction137___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:291 */
+  fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:301 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction138_parser___ReduceAction138___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:292 */
+  fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:302 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction139_parser___ReduceAction139___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:293 */
+  fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:303 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction140_parser___ReduceAction140___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:294 */
+  fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:304 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction141_parser___ReduceAction141___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:295 */
+  fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:305 */
   REGB0 = TAG_Int(12);
-  fra.me.REG[2] = NEW_ReduceAction142_parser___ReduceAction142___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:296 */
+  fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:306 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:307 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:308 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:309 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:310 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:311 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:312 */
+  REGB0 = TAG_Int(12);
+  fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:313 */
   REGB0 = TAG_Int(13);
-  fra.me.REG[2] = NEW_ReduceAction143_parser___ReduceAction143___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:297 */
+  fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:314 */
   REGB0 = TAG_Int(13);
-  fra.me.REG[2] = NEW_ReduceAction144_parser___ReduceAction144___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:298 */
+  fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:315 */
   REGB0 = TAG_Int(14);
-  fra.me.REG[2] = NEW_ReduceAction145_parser___ReduceAction145___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:299 */
+  fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:316 */
   REGB0 = TAG_Int(14);
-  fra.me.REG[2] = NEW_ReduceAction146_parser___ReduceAction146___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:300 */
+  fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:317 */
   REGB0 = TAG_Int(15);
-  fra.me.REG[2] = NEW_ReduceAction147_parser___ReduceAction147___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:301 */
+  fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:318 */
   REGB0 = TAG_Int(15);
-  fra.me.REG[2] = NEW_ReduceAction148_parser___ReduceAction148___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:302 */
+  fra.me.REG[2] = NEW_ReduceAction165_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:319 */
   REGB0 = TAG_Int(16);
-  fra.me.REG[2] = NEW_ReduceAction149_parser___ReduceAction149___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:303 */
+  fra.me.REG[2] = NEW_ReduceAction166_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:320 */
   REGB0 = TAG_Int(16);
-  fra.me.REG[2] = NEW_ReduceAction150_parser___ReduceAction150___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:304 */
+  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:321 */
   REGB0 = TAG_Int(16);
-  fra.me.REG[2] = NEW_ReduceAction151_parser___ReduceAction151___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:305 */
+  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:322 */
   REGB0 = TAG_Int(16);
-  fra.me.REG[2] = NEW_ReduceAction152_parser___ReduceAction152___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:306 */
+  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:323 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction153_parser___ReduceAction153___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:307 */
+  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:324 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction154_parser___ReduceAction154___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:308 */
+  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:325 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction155_parser___ReduceAction155___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:309 */
+  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:326 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction156_parser___ReduceAction156___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:310 */
+  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:327 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction157_parser___ReduceAction157___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:311 */
+  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:328 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction158_parser___ReduceAction158___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:312 */
+  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:329 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction159_parser___ReduceAction159___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:313 */
+  fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:330 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction160_parser___ReduceAction160___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:314 */
+  fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:331 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction161_parser___ReduceAction161___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:315 */
+  fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:332 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction162_parser___ReduceAction162___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:316 */
+  fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:333 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction163_parser___ReduceAction163___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:317 */
+  fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:334 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction164_parser___ReduceAction164___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:318 */
+  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:335 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction165_parser___ReduceAction165___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:319 */
+  fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:336 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction166_parser___ReduceAction166___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:320 */
+  fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:337 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction167_parser___ReduceAction167___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:321 */
+  fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:338 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction168_parser___ReduceAction168___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:322 */
+  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:339 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction169_parser___ReduceAction169___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:323 */
+  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:340 */
   REGB0 = TAG_Int(17);
-  fra.me.REG[2] = NEW_ReduceAction170_parser___ReduceAction170___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:324 */
+  fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:341 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:342 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:325 */
+  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:343 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction172___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:326 */
+  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:344 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction173___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:327 */
+  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:345 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction174___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:328 */
+  fra.me.REG[2] = NEW_ReduceAction192_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:346 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction175_parser___ReduceAction175___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:329 */
+  fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:347 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction176_parser___ReduceAction176___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:330 */
+  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:348 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction177_parser___ReduceAction177___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:331 */
+  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:349 */
   REGB0 = TAG_Int(18);
-  fra.me.REG[2] = NEW_ReduceAction178_parser___ReduceAction178___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:332 */
+  fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:350 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:351 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:352 */
+  REGB0 = TAG_Int(18);
+  fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:353 */
   REGB0 = TAG_Int(19);
-  fra.me.REG[2] = NEW_ReduceAction179_parser___ReduceAction179___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:333 */
+  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:354 */
   REGB0 = TAG_Int(19);
-  fra.me.REG[2] = NEW_ReduceAction180_parser___ReduceAction180___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:334 */
+  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:355 */
   REGB0 = TAG_Int(19);
-  fra.me.REG[2] = NEW_ReduceAction181_parser___ReduceAction181___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:335 */
+  fra.me.REG[2] = NEW_ReduceAction202_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:356 */
   REGB0 = TAG_Int(19);
-  fra.me.REG[2] = NEW_ReduceAction182_parser___ReduceAction182___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:336 */
-  REGB0 = TAG_Int(20);
-  fra.me.REG[2] = NEW_ReduceAction183_parser___ReduceAction183___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:337 */
+  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:357 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:358 */
+  REGB0 = TAG_Int(19);
+  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:359 */
   REGB0 = TAG_Int(20);
-  fra.me.REG[2] = NEW_ReduceAction184_parser___ReduceAction184___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:338 */
+  fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:360 */
   REGB0 = TAG_Int(20);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:339 */
+  fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:361 */
   REGB0 = TAG_Int(21);
-  fra.me.REG[2] = NEW_ReduceAction186_parser___ReduceAction186___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:340 */
+  fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:362 */
   REGB0 = TAG_Int(22);
-  fra.me.REG[2] = NEW_ReduceAction187_parser___ReduceAction187___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:341 */
+  fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:363 */
   REGB0 = TAG_Int(22);
-  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction188___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:342 */
+  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:364 */
   REGB0 = TAG_Int(22);
-  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction189___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:343 */
+  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:365 */
   REGB0 = TAG_Int(23);
-  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction190___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:344 */
+  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:366 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction191___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:345 */
+  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:367 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction192_parser___ReduceAction192___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:346 */
+  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:368 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction193_parser___ReduceAction193___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:347 */
+  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:369 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction194_parser___ReduceAction194___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:348 */
+  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:370 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction195_parser___ReduceAction195___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:349 */
+  fra.me.REG[2] = NEW_ReduceAction217_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:371 */
   REGB0 = TAG_Int(24);
-  fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction196___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:350 */
+  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:372 */
   REGB0 = TAG_Int(25);
-  fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction197___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:351 */
+  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:373 */
   REGB0 = TAG_Int(26);
-  fra.me.REG[2] = NEW_ReduceAction198_parser___ReduceAction198___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:352 */
+  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:374 */
   REGB0 = TAG_Int(26);
-  fra.me.REG[2] = NEW_ReduceAction199_parser___ReduceAction199___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:353 */
+  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:375 */
   REGB0 = TAG_Int(27);
-  fra.me.REG[2] = NEW_ReduceAction200_parser___ReduceAction200___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:354 */
+  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:376 */
   REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction201___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:355 */
+  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:377 */
   REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction201_parser___ReduceAction201___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:356 */
+  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:378 */
   REGB0 = TAG_Int(28);
-  fra.me.REG[2] = NEW_ReduceAction203_parser___ReduceAction203___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:357 */
+  fra.me.REG[2] = NEW_ReduceAction225_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:379 */
   REGB0 = TAG_Int(29);
-  fra.me.REG[2] = NEW_ReduceAction204_parser___ReduceAction204___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:358 */
+  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:380 */
   REGB0 = TAG_Int(29);
-  fra.me.REG[2] = NEW_ReduceAction205_parser___ReduceAction205___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:359 */
+  fra.me.REG[2] = NEW_ReduceAction227_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:381 */
   REGB0 = TAG_Int(29);
-  fra.me.REG[2] = NEW_ReduceAction206_parser___ReduceAction206___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:360 */
+  fra.me.REG[2] = NEW_ReduceAction228_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:382 */
   REGB0 = TAG_Int(30);
-  fra.me.REG[2] = NEW_ReduceAction207_parser___ReduceAction207___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:361 */
+  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:383 */
   REGB0 = TAG_Int(30);
-  fra.me.REG[2] = NEW_ReduceAction208_parser___ReduceAction208___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:362 */
+  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:384 */
   REGB0 = TAG_Int(30);
-  fra.me.REG[2] = NEW_ReduceAction209_parser___ReduceAction209___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:363 */
+  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:385 */
   REGB0 = TAG_Int(31);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:364 */
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:386 */
   REGB0 = TAG_Int(31);
-  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction211___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:365 */
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:387 */
   REGB0 = TAG_Int(31);
-  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction212___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:366 */
+  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:388 */
   REGB0 = TAG_Int(31);
-  fra.me.REG[2] = NEW_ReduceAction213_parser___ReduceAction213___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:367 */
+  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:389 */
   REGB0 = TAG_Int(32);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:368 */
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:390 */
   REGB0 = TAG_Int(32);
-  fra.me.REG[2] = NEW_ReduceAction215_parser___ReduceAction215___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:369 */
+  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:391 */
   REGB0 = TAG_Int(33);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:370 */
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:392 */
   REGB0 = TAG_Int(34);
-  fra.me.REG[2] = NEW_ReduceAction216_parser___ReduceAction216___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:371 */
+  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:393 */
   REGB0 = TAG_Int(35);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:372 */
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:394 */
   REGB0 = TAG_Int(35);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:373 */
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:395 */
   REGB0 = TAG_Int(35);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:374 */
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:396 */
   REGB0 = TAG_Int(35);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:375 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:397 */
   REGB0 = TAG_Int(36);
-  fra.me.REG[2] = NEW_ReduceAction222_parser___ReduceAction222___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:376 */
+  fra.me.REG[2] = NEW_ReduceAction244_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:398 */
   REGB0 = TAG_Int(36);
-  fra.me.REG[2] = NEW_ReduceAction223_parser___ReduceAction223___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:377 */
+  fra.me.REG[2] = NEW_ReduceAction245_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:399 */
   REGB0 = TAG_Int(37);
-  fra.me.REG[2] = NEW_ReduceAction224_parser___ReduceAction224___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:378 */
+  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:400 */
   REGB0 = TAG_Int(37);
-  fra.me.REG[2] = NEW_ReduceAction225_parser___ReduceAction225___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:379 */
+  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:401 */
   REGB0 = TAG_Int(38);
-  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction226___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:380 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:381 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:382 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction229___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:383 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:384 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:385 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:386 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:387 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:388 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:389 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:390 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:391 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction238___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:392 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:393 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:394 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:395 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:396 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:397 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:398 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:399 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:400 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:401 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:402 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:403 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:404 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:405 */
-  REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:406 */
+  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:402 */
+  REGB0 = TAG_Int(38);
+  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:403 */
   REGB0 = TAG_Int(39);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:407 */
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:404 */
   REGB0 = TAG_Int(40);
-  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction254___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:408 */
-  REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:409 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:405 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:406 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:407 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:408 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:409 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:410 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:411 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:412 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:413 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:414 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:415 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:416 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:417 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:418 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:419 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:420 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:421 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:422 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:423 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:424 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:425 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:426 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:427 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:428 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:429 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:430 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:431 */
+  REGB0 = TAG_Int(40);
+  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:432 */
   REGB0 = TAG_Int(41);
-  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:410 */
-  REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:411 */
-  REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:412 */
-  REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:413 */
+  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:433 */
   REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction260___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:414 */
+  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:434 */
   REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:415 */
-  REGB0 = TAG_Int(42);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:416 */
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:435 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:436 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:437 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:438 */
   REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction263___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:417 */
+  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:439 */
   REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction264_parser___ReduceAction264___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:418 */
+  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:440 */
   REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction265_parser___ReduceAction265___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:419 */
+  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:441 */
   REGB0 = TAG_Int(43);
-  fra.me.REG[2] = NEW_ReduceAction266_parser___ReduceAction266___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:420 */
+  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:442 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:443 */
+  REGB0 = TAG_Int(43);
+  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:444 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:445 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:446 */
   REGB0 = TAG_Int(44);
-  fra.me.REG[2] = NEW_ReduceAction267_parser___ReduceAction267___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:421 */
+  fra.me.REG[2] = NEW_ReduceAction293_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:447 */
   REGB0 = TAG_Int(44);
-  fra.me.REG[2] = NEW_ReduceAction268_parser___ReduceAction268___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:422 */
+  fra.me.REG[2] = NEW_ReduceAction294_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:448 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:449 */
+  REGB0 = TAG_Int(44);
+  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:450 */
   REGB0 = TAG_Int(45);
-  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:423 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:424 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:425 */
-  REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:426 */
+  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:451 */
+  REGB0 = TAG_Int(45);
+  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:452 */
   REGB0 = TAG_Int(46);
-  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:427 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:428 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:429 */
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:453 */
   REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:430 */
+  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:454 */
   REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction277___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:431 */
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:455 */
   REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction278___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:432 */
+  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:456 */
   REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:433 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:434 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:435 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:436 */
-  REGB0 = TAG_Int(47);
-  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:437 */
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:457 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:458 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:459 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:460 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:461 */
   REGB0 = TAG_Int(48);
-  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction284___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:438 */
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:462 */
   REGB0 = TAG_Int(48);
-  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction285___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:439 */
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:463 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:464 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:465 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:466 */
+  REGB0 = TAG_Int(48);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:467 */
   REGB0 = TAG_Int(49);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:440 */
+  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:468 */
   REGB0 = TAG_Int(49);
-  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:441 */
+  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:469 */
   REGB0 = TAG_Int(50);
-  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction288___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:442 */
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:470 */
   REGB0 = TAG_Int(50);
-  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction289___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:443 */
-  REGB0 = TAG_Int(50);
-  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction290___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:444 */
-  REGB0 = TAG_Int(50);
-  fra.me.REG[2] = NEW_ReduceAction291_parser___ReduceAction291___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:445 */
-  REGB0 = TAG_Int(50);
-  fra.me.REG[2] = NEW_ReduceAction292_parser___ReduceAction292___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:446 */
+  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:471 */
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:472 */
   REGB0 = TAG_Int(51);
-  fra.me.REG[2] = NEW_ReduceAction226_parser___ReduceAction226___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:447 */
+  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:473 */
   REGB0 = TAG_Int(51);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:448 */
+  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:474 */
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:475 */
+  REGB0 = TAG_Int(51);
+  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:476 */
   REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:449 */
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:477 */
   REGB0 = TAG_Int(52);
-  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction296___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:450 */
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:478 */
   REGB0 = TAG_Int(53);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:451 */
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:479 */
   REGB0 = TAG_Int(53);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:452 */
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:480 */
   REGB0 = TAG_Int(54);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:453 */
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:481 */
   REGB0 = TAG_Int(54);
-  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction300___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:454 */
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:482 */
   REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:455 */
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:483 */
   REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction302___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:456 */
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:484 */
   REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction303___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:457 */
+  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:485 */
   REGB0 = TAG_Int(55);
-  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction304___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:458 */
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:486 */
   REGB0 = TAG_Int(56);
-  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction305___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:459 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:460 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:461 */
-  REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:462 */
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:487 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:488 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:489 */
+  REGB0 = TAG_Int(56);
+  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:490 */
   REGB0 = TAG_Int(57);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:463 */
+  fra.me.REG[2] = NEW_ReduceAction337_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:491 */
   REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:464 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:492 */
   REGB0 = TAG_Int(58);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:465 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:466 */
-  REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:467 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:493 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:494 */
+  REGB0 = TAG_Int(58);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:495 */
   REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:468 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:496 */
   REGB0 = TAG_Int(59);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:469 */
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:497 */
   REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:470 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:498 */
   REGB0 = TAG_Int(60);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:471 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:472 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:473 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:474 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:475 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:476 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:477 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:478 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:479 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:480 */
-  REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:481 */
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:499 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:500 */
+  REGB0 = TAG_Int(60);
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:501 */
   REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:482 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:502 */
   REGB0 = TAG_Int(61);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:483 */
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:503 */
   REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:484 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:504 */
   REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:485 */
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:505 */
   REGB0 = TAG_Int(62);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:486 */
-  REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:487 */
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:506 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:507 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:508 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:509 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:510 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:511 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:512 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:513 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:514 */
+  REGB0 = TAG_Int(62);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:515 */
   REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:488 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:516 */
   REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:489 */
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:517 */
   REGB0 = TAG_Int(63);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:490 */
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:518 */
   REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:491 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:519 */
   REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:492 */
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:520 */
   REGB0 = TAG_Int(64);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:493 */
-  REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:494 */
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:521 */
+  REGB0 = TAG_Int(64);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:522 */
   REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:495 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:523 */
   REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:496 */
+  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:524 */
   REGB0 = TAG_Int(65);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:497 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:498 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:499 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:500 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:501 */
+  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:525 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:502 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:526 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:503 */
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:527 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:504 */
+  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:528 */
   REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:505 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:506 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:507 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction354___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:508 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction355___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:509 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction356___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:510 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:511 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:512 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:513 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:514 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:515 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:516 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:517 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:518 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:519 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:520 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:521 */
-  REGB0 = TAG_Int(66);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:522 */
+  fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:529 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:530 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:531 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:532 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:533 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:534 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:535 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:536 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:537 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:538 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:539 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction386_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:540 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:541 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:542 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:543 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:544 */
   REGB0 = TAG_Int(67);
-  fra.me.REG[2] = NEW_ReduceAction369_parser___ReduceAction369___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:523 */
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:545 */
   REGB0 = TAG_Int(67);
-  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction370___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:524 */
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:546 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:547 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:548 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:549 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:550 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:551 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:552 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:553 */
+  REGB0 = TAG_Int(67);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:554 */
   REGB0 = TAG_Int(68);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:525 */
+  fra.me.REG[2] = NEW_ReduceAction401_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:555 */
+  REGB0 = TAG_Int(68);
+  fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:556 */
   REGB0 = TAG_Int(69);
-  fra.me.REG[2] = NEW_ReduceAction372_parser___ReduceAction372___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:526 */
+  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:557 */
   REGB0 = TAG_Int(70);
-  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction371___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:527 */
+  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:558 */
   REGB0 = TAG_Int(71);
-  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction374___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:528 */
+  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:559 */
   REGB0 = TAG_Int(72);
-  fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction375___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:529 */
-  REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:530 */
-  REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:531 */
-  REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:532 */
+  fra.me.REG[2] = NEW_ReduceAction406_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:560 */
   REGB0 = TAG_Int(73);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:533 */
+  fra.me.REG[2] = NEW_ReduceAction407_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:561 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:534 */
+  fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:562 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:535 */
+  fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:563 */
   REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:536 */
-  REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction185_parser___ReduceAction185___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:537 */
-  REGB0 = TAG_Int(74);
-  fra.me.REG[2] = NEW_ReduceAction379_parser___ReduceAction379___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:538 */
+  fra.me.REG[2] = NEW_ReduceAction410_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:564 */
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction408_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:565 */
+  REGB0 = TAG_Int(75);
+  fra.me.REG[2] = NEW_ReduceAction412_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:566 */
   REGB0 = TAG_Int(75);
-  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction376___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:539 */
+  fra.me.REG[2] = NEW_ReduceAction409_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:567 */
   REGB0 = TAG_Int(75);
-  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction377___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:540 */
+  fra.me.REG[2] = NEW_ReduceAction410_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:568 */
   REGB0 = TAG_Int(76);
-  fra.me.REG[2] = NEW_ReduceAction387_parser___ReduceAction387___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:541 */
+  fra.me.REG[2] = NEW_ReduceAction415_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:569 */
   REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction388_parser___ReduceAction388___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:542 */
+  fra.me.REG[2] = NEW_ReduceAction416_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:570 */
   REGB0 = TAG_Int(77);
-  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:543 */
+  fra.me.REG[2] = NEW_ReduceAction417_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:571 */
   REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:544 */
-  REGB0 = TAG_Int(78);
-  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction391___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:545 */
-  REGB0 = TAG_Int(79);
-  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction392___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:546 */
+  fra.me.REG[2] = NEW_ReduceAction418_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:572 */
   REGB0 = TAG_Int(79);
-  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction393___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:547 */
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:573 */
   REGB0 = TAG_Int(79);
-  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction394___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:548 */
+  fra.me.REG[2] = NEW_ReduceAction420_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:574 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction421_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:575 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction422_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:576 */
   REGB0 = TAG_Int(80);
-  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction395___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:549 */
+  fra.me.REG[2] = NEW_ReduceAction423_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:577 */
+  REGB0 = TAG_Int(80);
+  fra.me.REG[2] = NEW_ReduceAction424_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:578 */
   REGB0 = TAG_Int(81);
-  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction396___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:550 */
-  REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:551 */
+  fra.me.REG[2] = NEW_ReduceAction425_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:579 */
+  REGB0 = TAG_Int(81);
+  fra.me.REG[2] = NEW_ReduceAction426_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:580 */
+  REGB0 = TAG_Int(81);
+  fra.me.REG[2] = NEW_ReduceAction427_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:581 */
   REGB0 = TAG_Int(82);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:552 */
+  fra.me.REG[2] = NEW_ReduceAction428_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:582 */
   REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction399___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:553 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction400___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:554 */
-  REGB0 = TAG_Int(83);
-  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction36___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:555 */
+  fra.me.REG[2] = NEW_ReduceAction429_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:583 */
   REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction402_parser___ReduceAction402___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:556 */
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:584 */
   REGB0 = TAG_Int(84);
-  fra.me.REG[2] = NEW_ReduceAction403_parser___ReduceAction403___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:557 */
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:585 */
   REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction404_parser___ReduceAction404___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:558 */
+  fra.me.REG[2] = NEW_ReduceAction432_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:586 */
   REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction405_parser___ReduceAction405___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:559 */
+  fra.me.REG[2] = NEW_ReduceAction433_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:587 */
   REGB0 = TAG_Int(85);
-  fra.me.REG[2] = NEW_ReduceAction397_parser___ReduceAction397___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:560 */
+  fra.me.REG[2] = NEW_ReduceAction36_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:588 */
   REGB0 = TAG_Int(86);
-  fra.me.REG[2] = NEW_ReduceAction66_parser___ReduceAction66___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:561 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction67___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:562 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction68___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:563 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction69___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:564 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction70___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:565 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction71___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:566 */
+  fra.me.REG[2] = NEW_ReduceAction435_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:589 */
+  REGB0 = TAG_Int(86);
+  fra.me.REG[2] = NEW_ReduceAction436_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:590 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction72___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:567 */
+  fra.me.REG[2] = NEW_ReduceAction437_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:591 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction77_parser___ReduceAction77___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:568 */
+  fra.me.REG[2] = NEW_ReduceAction438_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:592 */
   REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction78___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:569 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction79___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:570 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction80___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:571 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction81___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:572 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction82___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:573 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction83___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:574 */
-  REGB0 = TAG_Int(87);
-  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction84___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:575 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction171_parser___ReduceAction171___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:576 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction172_parser___ReduceAction172___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:577 */
+  fra.me.REG[2] = NEW_ReduceAction430_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:593 */
   REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction173_parser___ReduceAction173___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:578 */
-  REGB0 = TAG_Int(88);
-  fra.me.REG[2] = NEW_ReduceAction174_parser___ReduceAction174___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:579 */
+  fra.me.REG[2] = NEW_ReduceAction67_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:594 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction68_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:595 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction69_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:596 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction70_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:597 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction71_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:598 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction72_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:599 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction73_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:600 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction78_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:601 */
   REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction210_parser___ReduceAction210___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:580 */
+  fra.me.REG[2] = NEW_ReduceAction79_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:602 */
   REGB0 = TAG_Int(89);
-  fra.me.REG[2] = NEW_ReduceAction211_parser___ReduceAction211___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:581 */
+  fra.me.REG[2] = NEW_ReduceAction80_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:603 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction81_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:604 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction82_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:605 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction83_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:606 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction84_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:607 */
+  REGB0 = TAG_Int(89);
+  fra.me.REG[2] = NEW_ReduceAction85_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:608 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction188_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:609 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction189_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:610 */
+  REGB0 = TAG_Int(90);
+  fra.me.REG[2] = NEW_ReduceAction190_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:611 */
   REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:582 */
+  fra.me.REG[2] = NEW_ReduceAction191_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:612 */
   REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:583 */
+  fra.me.REG[2] = NEW_ReduceAction196_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:613 */
   REGB0 = TAG_Int(90);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:584 */
+  fra.me.REG[2] = NEW_ReduceAction197_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:614 */
   REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:585 */
+  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:615 */
   REGB0 = TAG_Int(91);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:586 */
+  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:616 */
   REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:587 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:617 */
   REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:588 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:618 */
   REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:589 */
-  REGB0 = TAG_Int(92);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:590 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:619 */
   REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:591 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:620 */
   REGB0 = TAG_Int(93);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:592 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:593 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:594 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:595 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:596 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:597 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:598 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:599 */
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:621 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:600 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:622 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:601 */
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:623 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:602 */
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:624 */
   REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:603 */
-  REGB0 = TAG_Int(94);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:604 */
-  REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:605 */
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:625 */
   REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:606 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:626 */
   REGB0 = TAG_Int(95);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:607 */
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:627 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:628 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:629 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:630 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:631 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:632 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:633 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:608 */
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:634 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:609 */
+  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:635 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:610 */
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:636 */
   REGB0 = TAG_Int(96);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:611 */
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:637 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:638 */
+  REGB0 = TAG_Int(96);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:639 */
   REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:612 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:640 */
   REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:613 */
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:641 */
   REGB0 = TAG_Int(97);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:614 */
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:642 */
   REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:615 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:643 */
   REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:616 */
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:644 */
   REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:617 */
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:645 */
   REGB0 = TAG_Int(98);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:618 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:619 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:620 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:621 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:622 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:623 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:624 */
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:646 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:625 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:647 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:626 */
+  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:648 */
   REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:627 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:628 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:629 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:630 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:631 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:632 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:633 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:634 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:635 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:636 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:637 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:638 */
-  REGB0 = TAG_Int(99);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:639 */
+  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:649 */
   REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:640 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:650 */
   REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:641 */
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:651 */
   REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:642 */
+  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:652 */
   REGB0 = TAG_Int(100);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:643 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:644 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:645 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction229_parser___ReduceAction229___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:646 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction230_parser___ReduceAction230___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:647 */
+  fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:653 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction231_parser___ReduceAction231___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:648 */
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:654 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction232_parser___ReduceAction232___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:649 */
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:655 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction233_parser___ReduceAction233___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:650 */
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:656 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction234_parser___ReduceAction234___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:651 */
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:657 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction235_parser___ReduceAction235___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:652 */
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:658 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction236___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:653 */
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:659 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction237_parser___ReduceAction237___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:654 */
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:660 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction238_parser___ReduceAction238___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:655 */
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:661 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction239_parser___ReduceAction239___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:656 */
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:662 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:657 */
+  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:663 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:658 */
+  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:664 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:659 */
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:665 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:660 */
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:666 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:661 */
+  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:667 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:662 */
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:668 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:663 */
+  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:669 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:664 */
+  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:670 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:665 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:671 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:666 */
+  fra.me.REG[2] = NEW_ReduceAction398_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:672 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:667 */
+  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:673 */
   REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:668 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:669 */
-  REGB0 = TAG_Int(101);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:670 */
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:674 */
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:675 */
+  REGB0 = TAG_Int(102);
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:676 */
   REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction255___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:671 */
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:677 */
   REGB0 = TAG_Int(102);
-  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction256___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:672 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:678 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:679 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:680 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:681 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction254_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:682 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction255_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:683 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction256_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:684 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:685 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:686 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:687 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:688 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:689 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:690 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction257_parser___ReduceAction257___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:673 */
+  fra.me.REG[2] = NEW_ReduceAction263_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:691 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction258_parser___ReduceAction258___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:674 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:692 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction259_parser___ReduceAction259___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:675 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:693 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction260_parser___ReduceAction260___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:676 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:694 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction261_parser___ReduceAction261___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:677 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:695 */
   REGB0 = TAG_Int(103);
-  fra.me.REG[2] = NEW_ReduceAction262_parser___ReduceAction262___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:678 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:696 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:697 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:698 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:699 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:700 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:701 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:702 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:703 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:704 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:705 */
+  REGB0 = TAG_Int(103);
+  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:706 */
   REGB0 = TAG_Int(104);
-  fra.me.REG[2] = NEW_ReduceAction269_parser___ReduceAction269___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:679 */
+  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:707 */
+  REGB0 = TAG_Int(104);
+  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:708 */
   REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction270___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:680 */
+  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:709 */
   REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction271___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:681 */
+  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:710 */
   REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction272___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:682 */
+  fra.me.REG[2] = NEW_ReduceAction284_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:711 */
   REGB0 = TAG_Int(105);
-  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction273___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:683 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction274___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:684 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction275___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:685 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction276___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:686 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction277___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:687 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction278_parser___ReduceAction278___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:688 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction279_parser___ReduceAction279___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:689 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction280_parser___ReduceAction280___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:690 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction281_parser___ReduceAction281___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:691 */
-  REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction282_parser___ReduceAction282___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:692 */
+  fra.me.REG[2] = NEW_ReduceAction285_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:712 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:713 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:714 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:715 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction289_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:716 */
+  REGB0 = TAG_Int(105);
+  fra.me.REG[2] = NEW_ReduceAction290_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:717 */
   REGB0 = TAG_Int(106);
-  fra.me.REG[2] = NEW_ReduceAction283_parser___ReduceAction283___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:693 */
+  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:718 */
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:719 */
   REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction286_parser___ReduceAction286___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:694 */
+  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:720 */
   REGB0 = TAG_Int(107);
-  fra.me.REG[2] = NEW_ReduceAction287_parser___ReduceAction287___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:695 */
+  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:721 */
+  REGB0 = TAG_Int(107);
+  fra.me.REG[2] = NEW_ReduceAction303_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:722 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction304_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:723 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction305_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:724 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction306_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:725 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction307_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:726 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction308_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:727 */
   REGB0 = TAG_Int(108);
-  fra.me.REG[2] = NEW_ReduceAction288_parser___ReduceAction288___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:696 */
+  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:728 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction310_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:729 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:730 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction312_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:731 */
+  REGB0 = TAG_Int(108);
+  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:732 */
   REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction295_parser___ReduceAction295___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:697 */
+  fra.me.REG[2] = NEW_ReduceAction316_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:733 */
   REGB0 = TAG_Int(109);
-  fra.me.REG[2] = NEW_ReduceAction296_parser___ReduceAction296___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:698 */
+  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:734 */
   REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction297_parser___ReduceAction297___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:699 */
-  REGB0 = TAG_Int(110);
-  fra.me.REG[2] = NEW_ReduceAction298_parser___ReduceAction298___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:700 */
+  fra.me.REG[2] = NEW_ReduceAction318_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:735 */
   REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction299_parser___ReduceAction299___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:701 */
+  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:736 */
   REGB0 = TAG_Int(111);
-  fra.me.REG[2] = NEW_ReduceAction300_parser___ReduceAction300___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:702 */
+  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:737 */
   REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction301_parser___ReduceAction301___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:703 */
+  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:738 */
   REGB0 = TAG_Int(112);
-  fra.me.REG[2] = NEW_ReduceAction302_parser___ReduceAction302___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:704 */
+  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:739 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:705 */
+  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:740 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:706 */
+  fra.me.REG[2] = NEW_ReduceAction330_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:741 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:707 */
+  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:742 */
   REGB0 = TAG_Int(113);
-  fra.me.REG[2] = NEW_ReduceAction309_parser___ReduceAction309___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:708 */
-  REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:709 */
+  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:743 */
   REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:710 */
+  fra.me.REG[2] = NEW_ReduceAction333_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:744 */
   REGB0 = TAG_Int(114);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:711 */
+  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:745 */
   REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:712 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:746 */
   REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:713 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:747 */
   REGB0 = TAG_Int(115);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:714 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:748 */
+  REGB0 = TAG_Int(115);
+  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:749 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction218_parser___ReduceAction218___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:715 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:750 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction219_parser___ReduceAction219___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:716 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:751 */
   REGB0 = TAG_Int(116);
-  fra.me.REG[2] = NEW_ReduceAction220_parser___ReduceAction220___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:717 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:752 */
   REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:718 */
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:753 */
   REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:719 */
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:754 */
   REGB0 = TAG_Int(117);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:720 */
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:755 */
   REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:721 */
+  fra.me.REG[2] = NEW_ReduceAction240_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:756 */
   REGB0 = TAG_Int(118);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:722 */
-  REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:723 */
+  fra.me.REG[2] = NEW_ReduceAction241_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:757 */
+  REGB0 = TAG_Int(118);
+  fra.me.REG[2] = NEW_ReduceAction242_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:758 */
   REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:724 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:759 */
   REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:725 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:760 */
   REGB0 = TAG_Int(119);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:726 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:761 */
   REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:727 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:762 */
   REGB0 = TAG_Int(120);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:728 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:729 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:730 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:731 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:732 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:733 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:734 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:735 */
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:763 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:736 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:764 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:737 */
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:765 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:738 */
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:766 */
   REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:739 */
-  REGB0 = TAG_Int(121);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:740 */
-  REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:741 */
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:767 */
   REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:742 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:768 */
   REGB0 = TAG_Int(122);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:743 */
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:769 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:770 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:771 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:772 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:773 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:774 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:775 */
   REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:744 */
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:776 */
   REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:745 */
+  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:777 */
   REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:746 */
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:778 */
   REGB0 = TAG_Int(123);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:747 */
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:779 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:780 */
+  REGB0 = TAG_Int(123);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:781 */
   REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:748 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:782 */
   REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:749 */
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:783 */
   REGB0 = TAG_Int(124);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:750 */
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:784 */
   REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:751 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:785 */
   REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:752 */
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:786 */
   REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction342_parser___ReduceAction342___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:753 */
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:787 */
   REGB0 = TAG_Int(125);
-  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction343___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:754 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction344_parser___ReduceAction344___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:755 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction345___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:756 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction246_parser___ReduceAction246___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:757 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction247_parser___ReduceAction247___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:758 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:759 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:760 */
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:788 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction252_parser___ReduceAction252___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:761 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:789 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction253_parser___ReduceAction253___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:762 */
+  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:790 */
   REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction352___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:763 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:764 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:765 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:766 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:767 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:768 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:769 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:770 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:771 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:772 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:773 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:774 */
-  REGB0 = TAG_Int(126);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:775 */
+  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:791 */
   REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:776 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:792 */
   REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:777 */
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:793 */
   REGB0 = TAG_Int(127);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:778 */
+  fra.me.REG[2] = NEW_ReduceAction374_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:794 */
+  REGB0 = TAG_Int(127);
+  fra.me.REG[2] = NEW_ReduceAction375_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:795 */
   REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:779 */
+  fra.me.REG[2] = NEW_ReduceAction376_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:796 */
   REGB0 = TAG_Int(128);
-  fra.me.REG[2] = NEW_ReduceAction311_parser___ReduceAction311___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:780 */
-  REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:781 */
+  fra.me.REG[2] = NEW_ReduceAction377_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:797 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction270_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:798 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction271_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:799 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:800 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:801 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction276_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:802 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction277_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:803 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction384_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:804 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:805 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:806 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:807 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:808 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:809 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:810 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:811 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:812 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:813 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:814 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:815 */
+  REGB0 = TAG_Int(128);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:816 */
   REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction313_parser___ReduceAction313___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:782 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:817 */
   REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction314_parser___ReduceAction314___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:783 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:818 */
   REGB0 = TAG_Int(129);
-  fra.me.REG[2] = NEW_ReduceAction315_parser___ReduceAction315___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:784 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:819 */
   REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:785 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:820 */
   REGB0 = TAG_Int(130);
-  fra.me.REG[2] = NEW_ReduceAction317_parser___ReduceAction317___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:786 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:787 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction319_parser___ReduceAction319___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:788 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction320_parser___ReduceAction320___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:789 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction321_parser___ReduceAction321___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:790 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction322_parser___ReduceAction322___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:791 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction323_parser___ReduceAction323___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:792 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction324_parser___ReduceAction324___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:793 */
+  fra.me.REG[2] = NEW_ReduceAction343_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:821 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction325_parser___ReduceAction325___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:794 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:822 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction326_parser___ReduceAction326___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:795 */
+  fra.me.REG[2] = NEW_ReduceAction345_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:823 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction327_parser___ReduceAction327___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:796 */
+  fra.me.REG[2] = NEW_ReduceAction346_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:824 */
   REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction328_parser___ReduceAction328___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:797 */
-  REGB0 = TAG_Int(131);
-  fra.me.REG[2] = NEW_ReduceAction329_parser___ReduceAction329___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:798 */
-  REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:799 */
+  fra.me.REG[2] = NEW_ReduceAction347_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:825 */
   REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction331_parser___ReduceAction331___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:800 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:826 */
   REGB0 = TAG_Int(132);
-  fra.me.REG[2] = NEW_ReduceAction332_parser___ReduceAction332___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:801 */
+  fra.me.REG[2] = NEW_ReduceAction349_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:827 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:828 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction351_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:829 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction352_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:830 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:831 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction354_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:832 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction355_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:833 */
   REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:802 */
+  fra.me.REG[2] = NEW_ReduceAction356_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:834 */
   REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction334_parser___ReduceAction334___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:803 */
+  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:835 */
   REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction335_parser___ReduceAction335___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:804 */
+  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:836 */
   REGB0 = TAG_Int(133);
-  fra.me.REG[2] = NEW_ReduceAction336_parser___ReduceAction336___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:805 */
+  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:837 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:838 */
+  REGB0 = TAG_Int(133);
+  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:839 */
   REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:806 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:840 */
   REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction338_parser___ReduceAction338___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:807 */
+  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:841 */
   REGB0 = TAG_Int(134);
-  fra.me.REG[2] = NEW_ReduceAction339_parser___ReduceAction339___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:808 */
+  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:842 */
   REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:809 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:843 */
   REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction341_parser___ReduceAction341___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:810 */
+  fra.me.REG[2] = NEW_ReduceAction366_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:844 */
   REGB0 = TAG_Int(135);
-  fra.me.REG[2] = NEW_ReduceAction657_parser___ReduceAction657___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:811 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction658_parser___ReduceAction658___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:812 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction659_parser___ReduceAction659___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:813 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction250_parser___ReduceAction250___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:814 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction251_parser___ReduceAction251___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:815 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction662_parser___ReduceAction662___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:816 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction353_parser___ReduceAction353___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:817 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction357_parser___ReduceAction357___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:818 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction358_parser___ReduceAction358___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:819 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction359_parser___ReduceAction359___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:820 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction360_parser___ReduceAction360___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:821 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction361_parser___ReduceAction361___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:822 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction362_parser___ReduceAction362___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:823 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction363_parser___ReduceAction363___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:824 */
-  REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction364_parser___ReduceAction364___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:825 */
+  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:845 */
+  REGB0 = TAG_Int(135);
+  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:846 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:826 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:847 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction367_parser___ReduceAction367___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:827 */
+  fra.me.REG[2] = NEW_ReduceAction370_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:848 */
   REGB0 = TAG_Int(136);
-  fra.me.REG[2] = NEW_ReduceAction368_parser___ReduceAction368___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:828 */
+  fra.me.REG[2] = NEW_ReduceAction371_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:849 */
+  REGB0 = TAG_Int(137);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:850 */
   REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction675_parser___ReduceAction675___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:829 */
+  fra.me.REG[2] = NEW_ReduceAction373_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:851 */
   REGB0 = TAG_Int(137);
-  fra.me.REG[2] = NEW_ReduceAction676_parser___ReduceAction676___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:830 */
+  fra.me.REG[2] = NEW_ReduceAction698_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:852 */
   REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:831 */
+  fra.me.REG[2] = NEW_ReduceAction699_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:853 */
   REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:832 */
+  fra.me.REG[2] = NEW_ReduceAction700_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:854 */
   REGB0 = TAG_Int(138);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:833 */
-  REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction221_parser___ReduceAction221___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:834 */
+  fra.me.REG[2] = NEW_ReduceAction274_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:855 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction275_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:856 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction703_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:857 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction385_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:858 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:859 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:860 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction391_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:861 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction392_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:862 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction393_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:863 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction394_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:864 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction395_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:865 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction396_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:866 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:867 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction399_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:868 */
+  REGB0 = TAG_Int(138);
+  fra.me.REG[2] = NEW_ReduceAction400_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:869 */
   REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction248_parser___ReduceAction248___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:835 */
+  fra.me.REG[2] = NEW_ReduceAction716_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:870 */
   REGB0 = TAG_Int(139);
-  fra.me.REG[2] = NEW_ReduceAction249_parser___ReduceAction249___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:836 */
+  fra.me.REG[2] = NEW_ReduceAction717_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:871 */
+  REGB0 = TAG_Int(140);
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:872 */
   REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction683_parser___ReduceAction683___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:837 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:873 */
   REGB0 = TAG_Int(140);
-  fra.me.REG[2] = NEW_ReduceAction684_parser___ReduceAction684___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:838 */
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:874 */
   REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction685_parser___ReduceAction685___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:839 */
+  fra.me.REG[2] = NEW_ReduceAction243_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:875 */
   REGB0 = TAG_Int(141);
-  fra.me.REG[2] = NEW_ReduceAction686_parser___ReduceAction686___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:840 */
+  fra.me.REG[2] = NEW_ReduceAction272_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:876 */
+  REGB0 = TAG_Int(141);
+  fra.me.REG[2] = NEW_ReduceAction273_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:877 */
   REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction687___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:841 */
+  fra.me.REG[2] = NEW_ReduceAction724_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:878 */
   REGB0 = TAG_Int(142);
-  fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:842 */
+  fra.me.REG[2] = NEW_ReduceAction725_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:879 */
   REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction689_parser___ReduceAction689___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:843 */
+  fra.me.REG[2] = NEW_ReduceAction726_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:880 */
   REGB0 = TAG_Int(143);
-  fra.me.REG[2] = NEW_ReduceAction690_parser___ReduceAction690___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:844 */
+  fra.me.REG[2] = NEW_ReduceAction727_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:881 */
   REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction687_parser___ReduceAction687___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:845 */
+  fra.me.REG[2] = NEW_ReduceAction728_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:882 */
   REGB0 = TAG_Int(144);
-  fra.me.REG[2] = NEW_ReduceAction688_parser___ReduceAction688___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:846 */
+  fra.me.REG[2] = NEW_ReduceAction729_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:883 */
   REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction693_parser___ReduceAction693___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:847 */
+  fra.me.REG[2] = NEW_ReduceAction730_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:884 */
   REGB0 = TAG_Int(145);
-  fra.me.REG[2] = NEW_ReduceAction694_parser___ReduceAction694___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:848 */
+  fra.me.REG[2] = NEW_ReduceAction731_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:885 */
   REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction695_parser___ReduceAction695___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:849 */
+  fra.me.REG[2] = NEW_ReduceAction728_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:886 */
   REGB0 = TAG_Int(146);
-  fra.me.REG[2] = NEW_ReduceAction696_parser___ReduceAction696___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:850 */
+  fra.me.REG[2] = NEW_ReduceAction729_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:887 */
   REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction697_parser___ReduceAction697___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:851 */
+  fra.me.REG[2] = NEW_ReduceAction734_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:888 */
   REGB0 = TAG_Int(147);
-  fra.me.REG[2] = NEW_ReduceAction698_parser___ReduceAction698___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:852 */
+  fra.me.REG[2] = NEW_ReduceAction735_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:889 */
   REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction699_parser___ReduceAction699___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:853 */
+  fra.me.REG[2] = NEW_ReduceAction736_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:890 */
   REGB0 = TAG_Int(148);
-  fra.me.REG[2] = NEW_ReduceAction700_parser___ReduceAction700___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:854 */
+  fra.me.REG[2] = NEW_ReduceAction737_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:891 */
   REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction214_parser___ReduceAction214___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:855 */
+  fra.me.REG[2] = NEW_ReduceAction738_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:892 */
   REGB0 = TAG_Int(149);
-  fra.me.REG[2] = NEW_ReduceAction702_parser___ReduceAction702___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:856 */
+  fra.me.REG[2] = NEW_ReduceAction739_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:893 */
   REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:857 */
+  fra.me.REG[2] = NEW_ReduceAction740_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:894 */
   REGB0 = TAG_Int(150);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction704___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:858 */
+  fra.me.REG[2] = NEW_ReduceAction741_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:895 */
   REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction389_parser___ReduceAction389___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:859 */
+  fra.me.REG[2] = NEW_ReduceAction236_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:896 */
   REGB0 = TAG_Int(151);
-  fra.me.REG[2] = NEW_ReduceAction706_parser___ReduceAction706___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:860 */
+  fra.me.REG[2] = NEW_ReduceAction743_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:897 */
   REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction382_parser___ReduceAction382___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:861 */
+  fra.me.REG[2] = NEW_ReduceAction744_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:898 */
   REGB0 = TAG_Int(152);
-  fra.me.REG[2] = NEW_ReduceAction704_parser___ReduceAction704___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:862 */
+  fra.me.REG[2] = NEW_ReduceAction745_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:899 */
   REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction390_parser___ReduceAction390___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:863 */
+  fra.me.REG[2] = NEW_ReduceAction212_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:900 */
   REGB0 = TAG_Int(153);
-  fra.me.REG[2] = NEW_ReduceAction710_parser___ReduceAction710___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:864 */
+  fra.me.REG[2] = NEW_ReduceAction747_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:901 */
   REGB0 = TAG_Int(154);
-  fra.me.REG[2] = NEW_ReduceAction711_parser___ReduceAction711___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:865 */
+  fra.me.REG[2] = NEW_ReduceAction744_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:902 */
   REGB0 = TAG_Int(154);
-  fra.me.REG[2] = NEW_ReduceAction712_parser___ReduceAction712___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:866 */
+  fra.me.REG[2] = NEW_ReduceAction745_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:903 */
   REGB0 = TAG_Int(155);
-  fra.me.REG[2] = NEW_ReduceAction713_parser___ReduceAction713___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:867 */
+  fra.me.REG[2] = NEW_ReduceAction419_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:904 */
   REGB0 = TAG_Int(155);
-  fra.me.REG[2] = NEW_ReduceAction714_parser___ReduceAction714___init(REGB0);
-  /* ./parser//parser.nit:152 */
-  CALL_abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  fra.me.REG[1] = NEW_Array_array___Array___with_items(fra.me.REG[1]);
+  fra.me.REG[2] = NEW_ReduceAction751_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:905 */
+  REGB0 = TAG_Int(156);
+  fra.me.REG[2] = NEW_ReduceAction752_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:906 */
+  REGB0 = TAG_Int(156);
+  fra.me.REG[2] = NEW_ReduceAction753_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:907 */
+  REGB0 = TAG_Int(157);
+  fra.me.REG[2] = NEW_ReduceAction754_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:908 */
+  REGB0 = TAG_Int(157);
+  fra.me.REG[2] = NEW_ReduceAction755_parser___ReduceAction___init(REGB0);
+  /* parser/parser.nit:152 */
+  CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  fra.me.REG[1] = NEW_Array_standard___collection___array___Array___with_items(fra.me.REG[1]);
   ATTR_parser___Parser____reduce_table(fra.me.REG[0]) = fra.me.REG[1];
   stack_frame_head = fra.me.prev;
   return;
@@ -4387,10 +4695,11 @@ void parser___ComputeProdLocationVisitor___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;
-  fra.me.line = 898;
+  fra.me.line = 939;
   fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___visit;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4402,7 +4711,7 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:900 */
+  /* parser/parser.nit:941 */
   REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -4411,191 +4720,201 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[1])(fra.me.REG[1], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:901 */
+    /* parser/parser.nit:942 */
     goto label1;
   } else {
-    /* ./parser//parser.nit:902 */
-    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Token, ID_Token)) /*cast Token*/;
+    /* parser/parser.nit:943 */
+    REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Token, ID_parser___parser_nodes___Token)) /*cast Token*/;
     if (UNTAG_Bool(REGB0)) {
-      /* ./parser//parser.nit:903 */
+      /* parser/parser.nit:944 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 903);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 944);
       }
-      fra.me.REG[2] = CALL_parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
-      /* ./parser//parser.nit:904 */
+      fra.me.REG[2] = CALL_parser___parser_nodes___ANode___location(fra.me.REG[1])(fra.me.REG[1]);
+      /* parser/parser.nit:945 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
-      /* ./parser//parser.nit:907 */
+      /* parser/parser.nit:948 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 907);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 948);
       }
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      /* ./../lib/standard//collection//array.nit:234 */
+      /* ../lib/standard/collection/array.nit:269 */
       REGB0 = TAG_Int(0);
-      /* ./../lib/standard//collection//array.nit:235 */
-      REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+      /* ../lib/standard/collection/array.nit:270 */
+      REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
       }
-      REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
-      /* ./../lib/standard//collection//array.nit:236 */
-      fra.me.REG[4] = ATTR_array___Array____items(fra.me.REG[3]);
-      /* ./../lib/standard//collection//array.nit:237 */
+      REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
+      /* ../lib/standard/collection/array.nit:271 */
+      fra.me.REG[4] = ATTR_standard___collection___array___Array____items(fra.me.REG[3]);
+      /* ../lib/standard/collection/array.nit:272 */
       while(1) {
-        /* ./../lib/standard//collection//array.nit:23 */
-        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
+        /* ../lib/standard/collection/array.nit:24 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+        }
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[3]);
+        REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB2)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[3]);
-        /* ./../lib/standard//kernel.nit:212 */
+        /* ../lib/standard/kernel.nit:232 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:237 */
+        /* ../lib/standard/collection/array.nit:272 */
         if (UNTAG_Bool(REGB1)) {
-          /* ./../lib/standard//collection//array.nit:238 */
+          /* ../lib/standard/collection/array.nit:273 */
           REGB1 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ./../lib/standard//collection//array.nit:654 */
+          /* ../lib/standard/collection/array.nit:718 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[4])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:908 */
+          /* parser/parser.nit:949 */
           ATTR_parser___Prod____first_location(fra.me.REG[5]) = fra.me.REG[2];
-          /* ./../lib/standard//collection//array.nit:239 */
+          /* ../lib/standard/collection/array.nit:274 */
           REGB1 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ../lib/standard/kernel.nit:235 */
           REGB1 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB1));
-          /* ./../lib/standard//collection//array.nit:239 */
+          /* ../lib/standard/collection/array.nit:274 */
           REGB0 = REGB1;
         } else {
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ../lib/standard/collection/array.nit:272 */
           goto label2;
         }
       }
       label2: while(0);
-      /* ./parser//parser.nit:910 */
+      /* parser/parser.nit:951 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 910);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 951);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
-      /* ./parser//parser.nit:913 */
+      CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[4])(fra.me.REG[4]);
+      /* parser/parser.nit:954 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 913);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 954);
       }
       fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      /* ./../lib/standard//collection//array.nit:234 */
+      /* ../lib/standard/collection/array.nit:269 */
       REGB0 = TAG_Int(0);
-      /* ./../lib/standard//collection//array.nit:235 */
-      REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+      /* ../lib/standard/collection/array.nit:270 */
+      REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
       if (UNTAG_Bool(REGB1)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+        nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
       }
-      REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-      /* ./../lib/standard//collection//array.nit:236 */
-      fra.me.REG[3] = ATTR_array___Array____items(fra.me.REG[4]);
-      /* ./../lib/standard//collection//array.nit:237 */
+      REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+      /* ../lib/standard/collection/array.nit:271 */
+      fra.me.REG[3] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
+      /* ../lib/standard/collection/array.nit:272 */
       while(1) {
-        /* ./../lib/standard//collection//array.nit:23 */
-        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+        /* ../lib/standard/collection/array.nit:24 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+        }
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+        REGB2 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB0), VTID_standard___kernel___Comparable___OTHER(REGB0))) /*cast OTHER*/;
+        if (UNTAG_Bool(REGB2)) {
+        } else {
+          nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
         }
-        REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-        /* ./../lib/standard//kernel.nit:212 */
+        /* ../lib/standard/kernel.nit:232 */
         REGB1 = TAG_Bool(UNTAG_Int(REGB0)<UNTAG_Int(REGB1));
-        /* ./../lib/standard//collection//array.nit:237 */
+        /* ../lib/standard/collection/array.nit:272 */
         if (UNTAG_Bool(REGB1)) {
-          /* ./../lib/standard//collection//array.nit:238 */
+          /* ../lib/standard/collection/array.nit:273 */
           REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+            nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
           }
-          /* ./../lib/standard//collection//array.nit:654 */
+          /* ../lib/standard/collection/array.nit:718 */
           fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[3])->val[UNTAG_Int(REGB0)];
-          /* ./parser//parser.nit:916 */
+          /* parser/parser.nit:957 */
           fra.me.REG[6] = fra.me.REG[2];
-          /* ./parser//parser.nit:917 */
+          /* parser/parser.nit:958 */
           fra.me.REG[7] = ATTR_parser___Prod____last_location(fra.me.REG[5]);
-          /* ./parser//parser.nit:918 */
+          /* parser/parser.nit:959 */
           fra.me.REG[8] = CALL_location___Location___file(fra.me.REG[6])(fra.me.REG[6]);
           REGB1 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 918);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 959);
           }
           REGB1 = CALL_location___Location___line_end(fra.me.REG[7])(fra.me.REG[7]);
           REGB2 = CALL_location___Location___line_start(fra.me.REG[6])(fra.me.REG[6]);
           REGB3 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
-            nit_abort("Reciever is null", NULL, LOCATE_parser, 918);
+            nit_abort("Reciever is null", NULL, LOCATE_parser, 959);
           }
           REGB3 = CALL_location___Location___column_end(fra.me.REG[7])(fra.me.REG[7]);
           REGB4 = CALL_location___Location___column_start(fra.me.REG[6])(fra.me.REG[6]);
           fra.me.REG[8] = NEW_Location_location___Location___init(fra.me.REG[8], REGB1, REGB2, REGB3, REGB4);
-          CALL_parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
-          /* ./../lib/standard//collection//array.nit:239 */
+          CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[8]);
+          /* ../lib/standard/collection/array.nit:274 */
           REGB4 = TAG_Int(1);
-          /* ./../lib/standard//kernel.nit:215 */
+          /* ../lib/standard/kernel.nit:235 */
           REGB4 = TAG_Int(UNTAG_Int(REGB0)+UNTAG_Int(REGB4));
-          /* ./../lib/standard//collection//array.nit:239 */
+          /* ../lib/standard/collection/array.nit:274 */
           REGB0 = REGB4;
         } else {
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ../lib/standard/collection/array.nit:272 */
           goto label3;
         }
       }
       label3: while(0);
-      /* ./parser//parser.nit:920 */
+      /* parser/parser.nit:961 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 920);
+        nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 961);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-      CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
+      CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
     } else {
-      /* ./parser//parser.nit:922 */
-      REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_Prod, ID_Prod)) /*cast Prod*/;
+      /* parser/parser.nit:963 */
+      REGB0 = TAG_Bool((fra.me.REG[1]!=NIT_NULL) && VAL_ISA(fra.me.REG[1], COLOR_parser___parser_nodes___Prod, ID_parser___parser_nodes___Prod)) /*cast Prod*/;
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Assert failed", NULL, LOCATE_parser, 922);
+        nit_abort("Assert failed", NULL, LOCATE_parser, 963);
       }
-      /* ./parser//parser.nit:923 */
+      /* parser/parser.nit:964 */
       REGB0 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0])!=NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
-        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 923);
+        nit_abort("Uninitialized attribute %s", "_need_first_prods", LOCATE_parser, 964);
       }
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_first_prods(fra.me.REG[0]);
-      CALL_abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
-      /* ./parser//parser.nit:925 */
+      CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[2])(fra.me.REG[2], fra.me.REG[1]);
+      /* parser/parser.nit:966 */
       fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:926 */
+      /* parser/parser.nit:967 */
       ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = NIT_NULL;
-      /* ./parser//parser.nit:927 */
+      /* parser/parser.nit:968 */
       REGB0 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
-        nit_abort("Reciever is null", NULL, LOCATE_parser, 927);
+        nit_abort("Reciever is null", NULL, LOCATE_parser, 968);
       }
-      CALL_parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
-      /* ./parser//parser.nit:928 */
+      CALL_parser___parser_prod___ANode___visit_all(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[0]);
+      /* parser/parser.nit:969 */
       fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]);
-      /* ./parser//parser.nit:929 */
+      /* parser/parser.nit:970 */
       REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4604,18 +4923,18 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           REGB4 = TAG_Bool(false);
           REGB0 = REGB4;
         } else {
-          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
           REGB0 = REGB4;
         }
       }
       if (UNTAG_Bool(REGB0)) {
         ATTR_parser___ComputeProdLocationVisitor____last_location(fra.me.REG[0]) = fra.me.REG[2];
       }
-      /* ./parser//parser.nit:931 */
+      /* parser/parser.nit:972 */
       ATTR_parser___Prod____last_location(fra.me.REG[1]) = fra.me.REG[3];
-      /* ./parser//parser.nit:932 */
+      /* parser/parser.nit:973 */
       fra.me.REG[2] = ATTR_parser___Prod____first_location(fra.me.REG[1]);
-      /* ./parser//parser.nit:933 */
+      /* parser/parser.nit:974 */
       REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
       if (UNTAG_Bool(REGB0)) {
       } else {
@@ -4624,13 +4943,13 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
           REGB4 = TAG_Bool(false);
           REGB0 = REGB4;
         } else {
-          REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
+          REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[2])(fra.me.REG[2], NIT_NULL);
           REGB0 = REGB4;
         }
       }
       REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
       if (UNTAG_Bool(REGB0)) {
-        /* ./parser//parser.nit:935 */
+        /* parser/parser.nit:976 */
         REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
         } else {
@@ -4639,221 +4958,231 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
             REGB4 = TAG_Bool(false);
             REGB0 = REGB4;
           } else {
-            REGB4 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+            REGB4 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
             REGB0 = REGB4;
           }
         }
         REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
         if (UNTAG_Bool(REGB0)) {
         } else {
-          nit_abort("Assert failed", NULL, LOCATE_parser, 935);
+          nit_abort("Assert failed", NULL, LOCATE_parser, 976);
         }
-        /* ./parser//parser.nit:937 */
+        /* parser/parser.nit:978 */
         REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
         fra.me.REG[4] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
         REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB0)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
         REGB0 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
         REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB4)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
         REGB4 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
         REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
         REGB3 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
         REGB2 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
         fra.me.REG[4] = NEW_Location_location___Location___init(fra.me.REG[4], REGB0, REGB4, REGB3, REGB2);
         REGB2 = TAG_Bool(fra.me.REG[1]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
-          nit_abort("Reciever is null", NULL, LOCATE_parser, 937);
+          nit_abort("Reciever is null", NULL, LOCATE_parser, 978);
         }
-        CALL_parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
-        /* ./parser//parser.nit:939 */
+        CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[4]);
+        /* parser/parser.nit:980 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 939);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 980);
         }
         fra.me.REG[4] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:234 */
+        /* ../lib/standard/collection/array.nit:269 */
         REGB2 = TAG_Int(0);
-        /* ./../lib/standard//collection//array.nit:235 */
-        REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+        /* ../lib/standard/collection/array.nit:270 */
+        REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
         if (UNTAG_Bool(REGB3)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
         }
-        REGB3 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-        /* ./../lib/standard//collection//array.nit:236 */
-        fra.me.REG[8] = ATTR_array___Array____items(fra.me.REG[4]);
-        /* ./../lib/standard//collection//array.nit:237 */
+        REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+        /* ../lib/standard/collection/array.nit:271 */
+        fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[4]);
+        /* ../lib/standard/collection/array.nit:272 */
         while(1) {
-          /* ./../lib/standard//collection//array.nit:23 */
-          REGB3 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
+          /* ../lib/standard/collection/array.nit:24 */
+          REGB3 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4])!=NIT_NULL);
           if (UNTAG_Bool(REGB3)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
+          }
+          REGB3 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[4]);
+          REGB4 = TAG_Bool(VAL_ISA(REGB3, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB4)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
           }
-          REGB3 = ATTR_array___AbstractArrayRead____length(fra.me.REG[4]);
-          /* ./../lib/standard//kernel.nit:212 */
+          /* ../lib/standard/kernel.nit:232 */
           REGB3 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB3));
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ../lib/standard/collection/array.nit:272 */
           if (UNTAG_Bool(REGB3)) {
-            /* ./../lib/standard//collection//array.nit:238 */
+            /* ../lib/standard/collection/array.nit:273 */
             REGB3 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ./../lib/standard//collection//array.nit:654 */
+            /* ../lib/standard/collection/array.nit:718 */
             fra.me.REG[5] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:942 */
+            /* parser/parser.nit:983 */
             REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 983);
             }
             fra.me.REG[6] = CALL_location___Location___file(fra.me.REG[2])(fra.me.REG[2]);
             REGB3 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 983);
             }
             REGB3 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB4 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB4)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 983);
             }
             REGB4 = CALL_location___Location___line_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB0 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB0)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 983);
             }
             REGB0 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
             REGB1 = TAG_Bool(fra.me.REG[2]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 942);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 983);
             }
             REGB1 = CALL_location___Location___column_start(fra.me.REG[2])(fra.me.REG[2]);
             fra.me.REG[6] = NEW_Location_location___Location___init(fra.me.REG[6], REGB3, REGB4, REGB0, REGB1);
-            CALL_parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
-            /* ./../lib/standard//collection//array.nit:239 */
+            CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+            /* ../lib/standard/collection/array.nit:274 */
             REGB1 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:215 */
+            /* ../lib/standard/kernel.nit:235 */
             REGB1 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB1));
-            /* ./../lib/standard//collection//array.nit:239 */
+            /* ../lib/standard/collection/array.nit:274 */
             REGB2 = REGB1;
           } else {
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ../lib/standard/collection/array.nit:272 */
             goto label4;
           }
         }
         label4: while(0);
-        /* ./parser//parser.nit:944 */
+        /* parser/parser.nit:985 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 944);
+          nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 985);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-        CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
-        /* ./parser//parser.nit:946 */
+        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[2])(fra.me.REG[2]);
+        /* parser/parser.nit:987 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 946);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 987);
         }
         fra.me.REG[2] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        /* ./../lib/standard//collection//array.nit:234 */
+        /* ../lib/standard/collection/array.nit:269 */
         REGB2 = TAG_Int(0);
-        /* ./../lib/standard//collection//array.nit:235 */
-        REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+        /* ../lib/standard/collection/array.nit:270 */
+        REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
         if (UNTAG_Bool(REGB1)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 235);
+          nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 270);
         }
-        REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
-        /* ./../lib/standard//collection//array.nit:236 */
-        fra.me.REG[8] = ATTR_array___Array____items(fra.me.REG[2]);
-        /* ./../lib/standard//collection//array.nit:237 */
+        REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+        /* ../lib/standard/collection/array.nit:271 */
+        fra.me.REG[8] = ATTR_standard___collection___array___Array____items(fra.me.REG[2]);
+        /* ../lib/standard/collection/array.nit:272 */
         while(1) {
-          /* ./../lib/standard//collection//array.nit:23 */
-          REGB1 = TAG_Bool(ATTR_array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
+          /* ../lib/standard/collection/array.nit:24 */
+          REGB1 = TAG_Bool(ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2])!=NIT_NULL);
           if (UNTAG_Bool(REGB1)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_length", LOCATE_array, 23);
+            nit_abort("Uninitialized attribute %s", "_length", LOCATE_standard___collection___array, 24);
           }
-          REGB1 = ATTR_array___AbstractArrayRead____length(fra.me.REG[2]);
-          /* ./../lib/standard//kernel.nit:212 */
+          REGB1 = ATTR_standard___collection___array___AbstractArrayRead____length(fra.me.REG[2]);
+          REGB0 = TAG_Bool(VAL_ISA(REGB1, VTCOLOR_standard___kernel___Comparable___OTHER(REGB2), VTID_standard___kernel___Comparable___OTHER(REGB2))) /*cast OTHER*/;
+          if (UNTAG_Bool(REGB0)) {
+          } else {
+            nit_abort("Cast failed", NULL, LOCATE_standard___kernel, 0);
+          }
+          /* ../lib/standard/kernel.nit:232 */
           REGB1 = TAG_Bool(UNTAG_Int(REGB2)<UNTAG_Int(REGB1));
-          /* ./../lib/standard//collection//array.nit:237 */
+          /* ../lib/standard/collection/array.nit:272 */
           if (UNTAG_Bool(REGB1)) {
-            /* ./../lib/standard//collection//array.nit:238 */
+            /* ../lib/standard/collection/array.nit:273 */
             REGB1 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_array, 238);
+              nit_abort("Reciever is null", NULL, LOCATE_standard___collection___array, 273);
             }
-            /* ./../lib/standard//collection//array.nit:654 */
+            /* ../lib/standard/collection/array.nit:718 */
             fra.me.REG[4] = ((Nit_NativeArray)fra.me.REG[8])->val[UNTAG_Int(REGB2)];
-            /* ./parser//parser.nit:949 */
+            /* parser/parser.nit:990 */
             REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 990);
             }
             fra.me.REG[6] = CALL_location___Location___file(fra.me.REG[3])(fra.me.REG[3]);
             REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB1)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 990);
             }
             REGB1 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB0)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 990);
             }
             REGB0 = CALL_location___Location___line_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB4 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB4)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 990);
             }
             REGB4 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
             REGB3 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
             if (UNTAG_Bool(REGB3)) {
-              nit_abort("Reciever is null", NULL, LOCATE_parser, 949);
+              nit_abort("Reciever is null", NULL, LOCATE_parser, 990);
             }
             REGB3 = CALL_location___Location___column_end(fra.me.REG[3])(fra.me.REG[3]);
             fra.me.REG[6] = NEW_Location_location___Location___init(fra.me.REG[6], REGB1, REGB0, REGB4, REGB3);
-            CALL_parser_nodes___Prod___location__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
-            /* ./../lib/standard//collection//array.nit:239 */
+            CALL_parser___parser_nodes___Prod___location__eq(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[6]);
+            /* ../lib/standard/collection/array.nit:274 */
             REGB3 = TAG_Int(1);
-            /* ./../lib/standard//kernel.nit:215 */
+            /* ../lib/standard/kernel.nit:235 */
             REGB3 = TAG_Int(UNTAG_Int(REGB2)+UNTAG_Int(REGB3));
-            /* ./../lib/standard//collection//array.nit:239 */
+            /* ../lib/standard/collection/array.nit:274 */
             REGB2 = REGB3;
           } else {
-            /* ./../lib/standard//collection//array.nit:237 */
+            /* ../lib/standard/collection/array.nit:272 */
             goto label5;
           }
         }
         label5: while(0);
-        /* ./parser//parser.nit:951 */
+        /* parser/parser.nit:992 */
         REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
-          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 951);
+          nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 992);
         }
         fra.me.REG[8] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-        CALL_abstract_collection___RemovableCollection___clear(fra.me.REG[8])(fra.me.REG[8]);
+        CALL_standard___collection___abstract_collection___RemovableCollection___clear(fra.me.REG[8])(fra.me.REG[8]);
       } else {
-        /* ./parser//parser.nit:955 */
+        /* parser/parser.nit:996 */
         REGB2 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
         if (UNTAG_Bool(REGB2)) {
         } else {
@@ -4862,28 +5191,28 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
             REGB3 = TAG_Bool(false);
             REGB2 = REGB3;
           } else {
-            REGB3 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+            REGB3 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
             REGB2 = REGB3;
           }
         }
         if (UNTAG_Bool(REGB2)) {
-          /* ./parser//parser.nit:957 */
+          /* parser/parser.nit:998 */
           REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 957);
+            nit_abort("Uninitialized attribute %s", "_need_before_epsilons", LOCATE_parser, 998);
           }
           fra.me.REG[3] = ATTR_parser___ComputeProdLocationVisitor____need_before_epsilons(fra.me.REG[0]);
-          CALL_abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[3])(fra.me.REG[3], fra.me.REG[1]);
         } else {
-          /* ./parser//parser.nit:960 */
+          /* parser/parser.nit:1001 */
           REGB2 = TAG_Bool(ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0])!=NIT_NULL);
           if (UNTAG_Bool(REGB2)) {
           } else {
-            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 960);
+            nit_abort("Uninitialized attribute %s", "_need_after_epsilons", LOCATE_parser, 1001);
           }
           fra.me.REG[0] = ATTR_parser___ComputeProdLocationVisitor____need_after_epsilons(fra.me.REG[0]);
-          CALL_abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
+          CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[1]);
         }
       }
     }
@@ -4893,20 +5222,21 @@ void parser___ComputeProdLocationVisitor___visit(val_t p0, val_t p1){
   return;
 }
 void parser___ComputeProdLocationVisitor___init(val_t p0, int* init_table){
-  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ComputeProdLocationVisitor].i;
+  int itpos2 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ComputeProdLocationVisitor].i;
   struct {struct stack_frame_t me;} fra;
   val_t tmp;
   if (init_table[itpos2]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 966;
+  fra.me.line = 1007;
   fra.me.meth = LOCATE_parser___ComputeProdLocationVisitor___init;
   fra.me.has_broke = 0;
   fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[0] = p0;
-  /* ./parser//parser.nit:966 */
-  CALL_parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
+  /* parser/parser.nit:1007 */
+  CALL_parser___parser_prod___Visitor___init(fra.me.REG[0])(fra.me.REG[0], init_table);
   stack_frame_head = fra.me.prev;
   init_table[itpos2] = 1;
   return;
@@ -4916,12 +5246,13 @@ void parser___ReduceAction___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 971;
+  fra.me.line = 1012;
   fra.me.meth = LOCATE_parser___ReduceAction___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 0;
-  /* ./parser//parser.nit:971 */
-  nit_abort("Deferred method called", NULL, LOCATE_parser, 971);
+  fra.me.nitni_local_ref_head = NULL;
+  /* parser/parser.nit:1012 */
+  nit_abort("Deferred method called", NULL, LOCATE_parser, 1012);
   stack_frame_head = fra.me.prev;
   return;
 }
@@ -4931,42 +5262,50 @@ val_t parser___ReduceAction___concat(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;
-  fra.me.line = 972;
+  fra.me.line = 1013;
   fra.me.meth = LOCATE_parser___ReduceAction___concat;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
   fra.me.REG[2] = p2;
-  /* ./parser//parser.nit:974 */
-  REGB0 = CALL_abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:1015 */
+  REGB0 = CALL_standard___collection___abstract_collection___Collection___is_empty(fra.me.REG[1])(fra.me.REG[1]);
   if (UNTAG_Bool(REGB0)) {
     fra.me.REG[0] = fra.me.REG[2];
     goto label1;
   }
-  /* ./parser//parser.nit:975 */
-  CALL_abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
-  /* ./parser//parser.nit:976 */
+  /* parser/parser.nit:1016 */
+  CALL_standard___collection___abstract_collection___Sequence___append(fra.me.REG[1])(fra.me.REG[1], fra.me.REG[2]);
+  /* parser/parser.nit:1017 */
   fra.me.REG[0] = fra.me.REG[1];
   goto label1;
   label1: while(0);
   stack_frame_head = fra.me.prev;
   return fra.me.REG[0];
 }
-void parser___ReduceAction___init(val_t p0, int* init_table){
-  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction].i;
+void parser___ReduceAction___init(val_t p0, val_t p1, int* init_table){
+  int itpos3 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_parser___ReduceAction].i;
   struct {struct stack_frame_t me;} fra;
+  val_t REGB0;
   val_t tmp;
   if (init_table[itpos3]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 0;
+  fra.me.line = 1020;
   fra.me.meth = LOCATE_parser___ReduceAction___init;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 0;
+  fra.me.REG_size = 1;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  REGB0 = p1;
+  /* parser/parser.nit:1020 */
+  ATTR_parser___ReduceAction____goto(fra.me.REG[0]) = REGB0;
   stack_frame_head = fra.me.prev;
   init_table[itpos3] = 1;
   return;
@@ -4977,10 +5316,11 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 982;
+  fra.me.line = 1025;
   fra.me.meth = LOCATE_parser___ReduceAction0___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -4988,134 +5328,88 @@ void parser___ReduceAction0___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:984 */
+  /* parser/parser.nit:1027 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:985 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:986 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:987 */
-  fra.me.REG[4] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:992 */
+  /* parser/parser.nit:1028 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1029 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1030 */
+  fra.me.REG[4] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:1035 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:993 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction0____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1036 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 993);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1036);
   }
-  REGB0 = ATTR_parser___ReduceAction0____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction0___init(val_t p0, val_t p1, int* init_table){
-  int itpos4 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction0].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction1___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos4]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 996;
-  fra.me.meth = LOCATE_parser___ReduceAction0___init;
+  fra.me.line = 1041;
+  fra.me.meth = LOCATE_parser___ReduceAction1___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:996 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction0____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos4] = 1;
-  return;
-}
-void parser___ReduceAction1___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1000;
-  fra.me.meth = LOCATE_parser___ReduceAction1___action;
-  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[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.nit:1002 */
+  /* parser/parser.nit:1043 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1003 */
+  /* parser/parser.nit:1044 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1004 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1005 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1007 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1045 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1046 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1048 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1007);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1048);
   }
-  /* ./parser//parser.nit:1008 */
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1013 */
+  /* parser/parser.nit:1049 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[3], fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1054 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1014 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction1____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1055 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1014);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1055);
   }
-  REGB0 = ATTR_parser___ReduceAction1____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction1___init(val_t p0, val_t p1, int* init_table){
-  int itpos5 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction1].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos5]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1017;
-  fra.me.meth = LOCATE_parser___ReduceAction1___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1017 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction1____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos5] = 1;
-  return;
-}
 void parser___ReduceAction2___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1021;
+  fra.me.line = 1060;
   fra.me.meth = LOCATE_parser___ReduceAction2___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5124,73 +5418,50 @@ void parser___ReduceAction2___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1023 */
+  /* parser/parser.nit:1062 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1024 */
+  /* parser/parser.nit:1063 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1025 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1026 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1028 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1064 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1065 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1067 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1067);
   }
-  /* ./parser//parser.nit:1029 */
+  /* parser/parser.nit:1068 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1030 */
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1035 */
+  /* parser/parser.nit:1069 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1074 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1036 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction2____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1075 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1036);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1075);
   }
-  REGB0 = ATTR_parser___ReduceAction2____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction2___init(val_t p0, val_t p1, int* init_table){
-  int itpos6 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction2].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 1039;
-  fra.me.meth = LOCATE_parser___ReduceAction2___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1039 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction2____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos6] = 1;
-  return;
-}
 void parser___ReduceAction3___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1043;
+  fra.me.line = 1080;
   fra.me.meth = LOCATE_parser___ReduceAction3___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5200,81 +5471,58 @@ void parser___ReduceAction3___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1045 */
+  /* parser/parser.nit:1082 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1046 */
+  /* parser/parser.nit:1083 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1047 */
+  /* parser/parser.nit:1084 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1048 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1049 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1051 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1085 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1086 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1088 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1051);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1088);
   }
-  /* ./parser//parser.nit:1053 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1090 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1053);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1090);
   }
-  /* ./parser//parser.nit:1054 */
+  /* parser/parser.nit:1091 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1055 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1060 */
+  /* parser/parser.nit:1092 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1097 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1061 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction3____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1098 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1061);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1098);
   }
-  REGB0 = ATTR_parser___ReduceAction3____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction3___init(val_t p0, val_t p1, int* init_table){
-  int itpos7 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction3].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos7]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1064;
-  fra.me.meth = LOCATE_parser___ReduceAction3___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1064 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction3____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos7] = 1;
-  return;
-}
 void parser___ReduceAction4___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1068;
+  fra.me.line = 1103;
   fra.me.meth = LOCATE_parser___ReduceAction4___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5283,73 +5531,50 @@ void parser___ReduceAction4___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1070 */
+  /* parser/parser.nit:1105 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1071 */
+  /* parser/parser.nit:1106 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1072 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1073 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1075 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1107 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1108 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1110 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1110);
   }
-  /* ./parser//parser.nit:1076 */
+  /* parser/parser.nit:1111 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1077 */
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1082 */
+  /* parser/parser.nit:1112 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1117 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1083 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction4____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1118 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1083);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1118);
   }
-  REGB0 = ATTR_parser___ReduceAction4____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction4___init(val_t p0, val_t p1, int* init_table){
-  int itpos8 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction4].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 1086;
-  fra.me.meth = LOCATE_parser___ReduceAction4___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1086 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction4____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos8] = 1;
-  return;
-}
 void parser___ReduceAction5___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1090;
+  fra.me.line = 1123;
   fra.me.meth = LOCATE_parser___ReduceAction5___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5359,81 +5584,58 @@ void parser___ReduceAction5___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1092 */
+  /* parser/parser.nit:1125 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1093 */
+  /* parser/parser.nit:1126 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1094 */
+  /* parser/parser.nit:1127 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1095 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1096 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1098 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1128 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1129 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1131 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1131);
   }
-  /* ./parser//parser.nit:1100 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1133 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1133);
   }
-  /* ./parser//parser.nit:1101 */
+  /* parser/parser.nit:1134 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1102 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1107 */
+  /* parser/parser.nit:1135 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1140 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1108 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction5____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1141 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1108);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1141);
   }
-  REGB0 = ATTR_parser___ReduceAction5____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction5___init(val_t p0, val_t p1, int* init_table){
-  int itpos9 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction5].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos9]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1111;
-  fra.me.meth = LOCATE_parser___ReduceAction5___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1111 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction5____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos9] = 1;
-  return;
-}
 void parser___ReduceAction6___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1115;
+  fra.me.line = 1146;
   fra.me.meth = LOCATE_parser___ReduceAction6___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5443,84 +5645,61 @@ void parser___ReduceAction6___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1117 */
+  /* parser/parser.nit:1148 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1118 */
+  /* parser/parser.nit:1149 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1119 */
+  /* parser/parser.nit:1150 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1120 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1121 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1123 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1151 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1152 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1154 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1154);
   }
-  /* ./parser//parser.nit:1124 */
+  /* parser/parser.nit:1155 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1126 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1157 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1157);
   }
-  /* ./parser//parser.nit:1127 */
+  /* parser/parser.nit:1158 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1128 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1133 */
+  /* parser/parser.nit:1159 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1164 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1134 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction6____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1165 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1165);
   }
-  REGB0 = ATTR_parser___ReduceAction6____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction6___init(val_t p0, val_t p1, int* init_table){
-  int itpos10 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction6].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos10]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1137;
-  fra.me.meth = LOCATE_parser___ReduceAction6___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1137 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction6____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos10] = 1;
-  return;
-}
 void parser___ReduceAction7___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1141;
+  fra.me.line = 1170;
   fra.me.meth = LOCATE_parser___ReduceAction7___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5531,82 +5710,58 @@ void parser___ReduceAction7___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1143 */
+  /* parser/parser.nit:1172 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1144 */
+  /* parser/parser.nit:1173 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1145 */
+  /* parser/parser.nit:1174 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1146 */
+  /* parser/parser.nit:1175 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1147 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1148 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1150 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1176 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1177 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1179 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1150);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1179);
   }
-  /* ./parser//parser.nit:1152 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1181 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1152);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1181);
   }
-  /* ./parser//parser.nit:1153 */
+  /* parser/parser.nit:1182 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1155 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1184 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1184);
   }
-  /* ./parser//parser.nit:1156 */
+  /* parser/parser.nit:1185 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1157 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1162 */
+  /* parser/parser.nit:1186 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1191 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1163 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction7____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1192 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1163);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1192);
   }
-  REGB0 = ATTR_parser___ReduceAction7____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction7___init(val_t p0, val_t p1, int* init_table){
-  int itpos11 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction7].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos11]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1166;
-  fra.me.meth = LOCATE_parser___ReduceAction7___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1166 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction7____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos11] = 1;
-  return;
-}
 void parser___ReduceAction8___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
@@ -5614,10 +5769,11 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1170;
+  fra.me.line = 1197;
   fra.me.meth = LOCATE_parser___ReduceAction8___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5627,28 +5783,28 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1172 */
+  /* parser/parser.nit:1199 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1173 */
+  /* parser/parser.nit:1200 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1174 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1175 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1176 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1178 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1201 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1202 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1203 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1205 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1205);
   }
-  /* ./parser//parser.nit:1179 */
+  /* parser/parser.nit:1206 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:1180 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1183 */
+  /* parser/parser.nit:1207 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:1210 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5657,55 +5813,31 @@ void parser___ReduceAction8___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB1 = CALL_standard___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)) {
-    /* ./parser//parser.nit:1184 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
+    /* parser/parser.nit:1211 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1186 */
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1191 */
+  /* parser/parser.nit:1213 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1218 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1192 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction8____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1219 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1192);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1219);
   }
-  REGB0 = ATTR_parser___ReduceAction8____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction8___init(val_t p0, val_t p1, int* init_table){
-  int itpos12 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction8].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;
-  fra.me.line = 1195;
-  fra.me.meth = LOCATE_parser___ReduceAction8___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1195 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction8____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos12] = 1;
-  return;
-}
 void parser___ReduceAction9___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -5713,10 +5845,11 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1199;
+  fra.me.line = 1224;
   fra.me.meth = LOCATE_parser___ReduceAction9___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5727,36 +5860,36 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1201 */
+  /* parser/parser.nit:1226 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1202 */
+  /* parser/parser.nit:1227 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1203 */
+  /* parser/parser.nit:1228 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1204 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1205 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1207 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1229 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1230 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1232 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1207);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1232);
   }
-  /* ./parser//parser.nit:1208 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1210 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1233 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1235 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1235);
   }
-  /* ./parser//parser.nit:1211 */
+  /* parser/parser.nit:1236 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1212 */
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1215 */
+  /* parser/parser.nit:1237 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* parser/parser.nit:1240 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5765,55 +5898,31 @@ void parser___ReduceAction9___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1216 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    /* parser/parser.nit:1241 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1218 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1223 */
+  /* parser/parser.nit:1243 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1248 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1224 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction9____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1249 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1224);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1249);
   }
-  REGB0 = ATTR_parser___ReduceAction9____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction9___init(val_t p0, val_t p1, int* init_table){
-  int itpos13 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction9].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos13]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1227;
-  fra.me.meth = LOCATE_parser___ReduceAction9___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1227 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction9____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos13] = 1;
-  return;
-}
 void parser___ReduceAction10___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
@@ -5821,10 +5930,11 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1231;
+  fra.me.line = 1254;
   fra.me.meth = LOCATE_parser___ReduceAction10___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5834,39 +5944,39 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1233 */
+  /* parser/parser.nit:1256 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1234 */
+  /* parser/parser.nit:1257 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1235 */
+  /* parser/parser.nit:1258 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1236 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1237 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1239 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1259 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1260 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1262 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1262);
   }
-  /* ./parser//parser.nit:1240 */
+  /* parser/parser.nit:1263 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1241 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1243 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1264 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1266 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1266);
   }
-  /* ./parser//parser.nit:1244 */
+  /* parser/parser.nit:1267 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1245 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1248 */
+  /* parser/parser.nit:1268 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:1271 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5875,55 +5985,31 @@ void parser___ReduceAction10___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1249 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    /* parser/parser.nit:1272 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1251 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1256 */
+  /* parser/parser.nit:1274 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1279 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1257 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction10____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1280 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1257);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1280);
   }
-  REGB0 = ATTR_parser___ReduceAction10____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction10___init(val_t p0, val_t p1, int* init_table){
-  int itpos14 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction10].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos14]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1260;
-  fra.me.meth = LOCATE_parser___ReduceAction10___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1260 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction10____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos14] = 1;
-  return;
-}
 void parser___ReduceAction11___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -5931,10 +6017,11 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1264;
+  fra.me.line = 1285;
   fra.me.meth = LOCATE_parser___ReduceAction11___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -5945,47 +6032,47 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1266 */
+  /* parser/parser.nit:1287 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1267 */
+  /* parser/parser.nit:1288 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1268 */
+  /* parser/parser.nit:1289 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1269 */
+  /* parser/parser.nit:1290 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1270 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1271 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1273 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1291 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1292 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1294 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1273);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1294);
   }
-  /* ./parser//parser.nit:1275 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1296 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1275);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1296);
   }
-  /* ./parser//parser.nit:1276 */
+  /* parser/parser.nit:1297 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1277 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1279 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1298 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1300 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1300);
   }
-  /* ./parser//parser.nit:1280 */
+  /* parser/parser.nit:1301 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:1281 */
-  fra.me.REG[4] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:1284 */
+  /* parser/parser.nit:1302 */
+  fra.me.REG[4] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:1305 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -5994,55 +6081,31 @@ void parser___ReduceAction11___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1285 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
+    /* parser/parser.nit:1306 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:1287 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1292 */
+  /* parser/parser.nit:1308 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1313 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1293 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction11____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1314 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1293);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1314);
   }
-  REGB0 = ATTR_parser___ReduceAction11____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction11___init(val_t p0, val_t p1, int* init_table){
-  int itpos15 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction11].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos15]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1296;
-  fra.me.meth = LOCATE_parser___ReduceAction11___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1296 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction11____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos15] = 1;
-  return;
-}
 void parser___ReduceAction12___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -6050,10 +6113,11 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1300;
+  fra.me.line = 1319;
   fra.me.meth = LOCATE_parser___ReduceAction12___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6064,39 +6128,39 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1302 */
+  /* parser/parser.nit:1321 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1303 */
+  /* parser/parser.nit:1322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1304 */
+  /* parser/parser.nit:1323 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1305 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1306 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1308 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1324 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1325 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1327 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1327);
   }
-  /* ./parser//parser.nit:1309 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1311 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1328 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1330 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1330);
   }
-  /* ./parser//parser.nit:1312 */
+  /* parser/parser.nit:1331 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
   fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:1313 */
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1316 */
+  /* parser/parser.nit:1332 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* parser/parser.nit:1335 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1317 */
+  /* parser/parser.nit:1336 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6105,55 +6169,31 @@ void parser___ReduceAction12___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1318 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    /* parser/parser.nit:1337 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1320 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1325 */
+  /* parser/parser.nit:1339 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1344 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1326 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction12____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1345 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1326);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1345);
   }
-  REGB0 = ATTR_parser___ReduceAction12____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction12___init(val_t p0, val_t p1, int* init_table){
-  int itpos16 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction12].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;
-  fra.me.line = 1329;
-  fra.me.meth = LOCATE_parser___ReduceAction12___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1329 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction12____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos16] = 1;
-  return;
-}
 void parser___ReduceAction13___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -6161,10 +6201,11 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1333;
+  fra.me.line = 1350;
   fra.me.meth = LOCATE_parser___ReduceAction13___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6176,47 +6217,47 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1335 */
+  /* parser/parser.nit:1352 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1336 */
+  /* parser/parser.nit:1353 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1337 */
+  /* parser/parser.nit:1354 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1338 */
+  /* parser/parser.nit:1355 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1339 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1340 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1342 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1356 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1357 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1359 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1359);
   }
-  /* ./parser//parser.nit:1344 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1361 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1361);
   }
-  /* ./parser//parser.nit:1345 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1347 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1362 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1364 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1347);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1364);
   }
-  /* ./parser//parser.nit:1348 */
+  /* parser/parser.nit:1365 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
   fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:1349 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1352 */
+  /* parser/parser.nit:1366 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:1369 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1353 */
+  /* parser/parser.nit:1370 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6225,55 +6266,31 @@ void parser___ReduceAction13___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1354 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    /* parser/parser.nit:1371 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1356 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1361 */
+  /* parser/parser.nit:1373 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1378 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1362 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction13____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1379 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1362);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1379);
   }
-  REGB0 = ATTR_parser___ReduceAction13____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction13___init(val_t p0, val_t p1, int* init_table){
-  int itpos17 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction13].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos17]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1365;
-  fra.me.meth = LOCATE_parser___ReduceAction13___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1365 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction13____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos17] = 1;
-  return;
-}
 void parser___ReduceAction14___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -6281,10 +6298,11 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1369;
+  fra.me.line = 1384;
   fra.me.meth = LOCATE_parser___ReduceAction14___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6295,50 +6313,50 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1371 */
+  /* parser/parser.nit:1386 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1372 */
+  /* parser/parser.nit:1387 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1373 */
+  /* parser/parser.nit:1388 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1374 */
+  /* parser/parser.nit:1389 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1375 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1376 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1378 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1390 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1391 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1393 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1393);
   }
-  /* ./parser//parser.nit:1379 */
+  /* parser/parser.nit:1394 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1381 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1396 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1396);
   }
-  /* ./parser//parser.nit:1382 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1384 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1397 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1399 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1384);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1399);
   }
-  /* ./parser//parser.nit:1385 */
+  /* parser/parser.nit:1400 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1386 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1389 */
+  /* parser/parser.nit:1401 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:1404 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1390 */
+  /* parser/parser.nit:1405 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6347,55 +6365,31 @@ void parser___ReduceAction14___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1391 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+    /* parser/parser.nit:1406 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1393 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1398 */
+  /* parser/parser.nit:1408 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1413 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1399 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction14____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1414 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1399);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1414);
   }
-  REGB0 = ATTR_parser___ReduceAction14____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction14___init(val_t p0, val_t p1, int* init_table){
-  int itpos18 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction14].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos18]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1402;
-  fra.me.meth = LOCATE_parser___ReduceAction14___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1402 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction14____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos18] = 1;
-  return;
-}
 void parser___ReduceAction15___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -6403,10 +6397,11 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1406;
+  fra.me.line = 1419;
   fra.me.meth = LOCATE_parser___ReduceAction15___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6418,58 +6413,58 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1408 */
+  /* parser/parser.nit:1421 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1409 */
+  /* parser/parser.nit:1422 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1410 */
+  /* parser/parser.nit:1423 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1411 */
+  /* parser/parser.nit:1424 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1412 */
+  /* parser/parser.nit:1425 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1413 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1414 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1416 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1426 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1427 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1429 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1429);
   }
-  /* ./parser//parser.nit:1418 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1431 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1431);
   }
-  /* ./parser//parser.nit:1419 */
+  /* parser/parser.nit:1432 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1421 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1434 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1421);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1434);
   }
-  /* ./parser//parser.nit:1422 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1424 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1435 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1437 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1437);
   }
-  /* ./parser//parser.nit:1425 */
+  /* parser/parser.nit:1438 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:1426 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1429 */
+  /* parser/parser.nit:1439 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:1442 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1430 */
+  /* parser/parser.nit:1443 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6478,55 +6473,31 @@ void parser___ReduceAction15___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1431 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    /* parser/parser.nit:1444 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1433 */
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1438 */
+  /* parser/parser.nit:1446 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1451 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1439 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction15____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1452 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1439);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1452);
   }
-  REGB0 = ATTR_parser___ReduceAction15____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction15___init(val_t p0, val_t p1, int* init_table){
-  int itpos19 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction15].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos19]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1442;
-  fra.me.meth = LOCATE_parser___ReduceAction15___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1442 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction15____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos19] = 1;
-  return;
-}
 void parser___ReduceAction16___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
@@ -6534,10 +6505,11 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1446;
+  fra.me.line = 1457;
   fra.me.meth = LOCATE_parser___ReduceAction16___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6546,21 +6518,21 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1448 */
+  /* parser/parser.nit:1459 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1449 */
+  /* parser/parser.nit:1460 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1450 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1451 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1453 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1461 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1462 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1464 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1464);
   }
-  /* ./parser//parser.nit:1454 */
+  /* parser/parser.nit:1465 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6569,55 +6541,31 @@ void parser___ReduceAction16___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1455 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:1466 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1457 */
-  fra.me.REG[5] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:1462 */
+  /* parser/parser.nit:1468 */
+  fra.me.REG[5] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:1473 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:1463 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction16____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1474 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1463);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1474);
   }
-  REGB0 = ATTR_parser___ReduceAction16____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction16___init(val_t p0, val_t p1, int* init_table){
-  int itpos20 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction16].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 1466;
-  fra.me.meth = LOCATE_parser___ReduceAction16___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1466 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction16____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos20] = 1;
-  return;
-}
 void parser___ReduceAction17___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
@@ -6625,10 +6573,11 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1470;
+  fra.me.line = 1479;
   fra.me.meth = LOCATE_parser___ReduceAction17___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6638,29 +6587,29 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1472 */
+  /* parser/parser.nit:1481 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1473 */
+  /* parser/parser.nit:1482 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1474 */
+  /* parser/parser.nit:1483 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1475 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1476 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1478 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1484 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1485 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1487 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1478);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1487);
   }
-  /* ./parser//parser.nit:1480 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1489 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1489);
   }
-  /* ./parser//parser.nit:1481 */
+  /* parser/parser.nit:1490 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6669,66 +6618,43 @@ void parser___ReduceAction17___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1482 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:1491 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1484 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1489 */
+  /* parser/parser.nit:1493 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1498 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1490 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction17____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1499 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1490);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1499);
   }
-  REGB0 = ATTR_parser___ReduceAction17____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction17___init(val_t p0, val_t p1, int* init_table){
-  int itpos21 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction17].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction18___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos21]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1493;
-  fra.me.meth = LOCATE_parser___ReduceAction17___init;
+  fra.me.line = 1504;
+  fra.me.meth = LOCATE_parser___ReduceAction18___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1493 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction17____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos21] = 1;
-  return;
-}
-void parser___ReduceAction18___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1497;
-  fra.me.meth = LOCATE_parser___ReduceAction18___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6738,32 +6664,32 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1499 */
+  /* parser/parser.nit:1506 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1500 */
+  /* parser/parser.nit:1507 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1501 */
+  /* parser/parser.nit:1508 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1502 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1503 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1505 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1509 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1510 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1512 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1505);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1512);
   }
-  /* ./parser//parser.nit:1506 */
+  /* parser/parser.nit:1513 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1508 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1515 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1515);
   }
-  /* ./parser//parser.nit:1509 */
+  /* parser/parser.nit:1516 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6772,55 +6698,31 @@ void parser___ReduceAction18___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1510 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:1517 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1512 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1517 */
+  /* parser/parser.nit:1519 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1524 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1518 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction18____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1525 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1518);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1525);
   }
-  REGB0 = ATTR_parser___ReduceAction18____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction18___init(val_t p0, val_t p1, int* init_table){
-  int itpos22 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction18].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 1521;
-  fra.me.meth = LOCATE_parser___ReduceAction18___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1521 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction18____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos22] = 1;
-  return;
-}
 void parser___ReduceAction19___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -6828,10 +6730,11 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1525;
+  fra.me.line = 1530;
   fra.me.meth = LOCATE_parser___ReduceAction19___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6842,40 +6745,40 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1527 */
+  /* parser/parser.nit:1532 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1528 */
+  /* parser/parser.nit:1533 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1529 */
+  /* parser/parser.nit:1534 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1530 */
+  /* parser/parser.nit:1535 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1531 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1532 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1534 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1536 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1537 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1539 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1534);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1539);
   }
-  /* ./parser//parser.nit:1536 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1541 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1541);
   }
-  /* ./parser//parser.nit:1537 */
+  /* parser/parser.nit:1542 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1539 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1544 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1544);
   }
-  /* ./parser//parser.nit:1540 */
+  /* parser/parser.nit:1545 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6884,55 +6787,31 @@ void parser___ReduceAction19___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1541 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1546 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1543 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1548 */
+  /* parser/parser.nit:1548 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1553 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1549 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction19____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1554 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1549);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1554);
   }
-  REGB0 = ATTR_parser___ReduceAction19____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction19___init(val_t p0, val_t p1, int* init_table){
-  int itpos23 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction19].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos23]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1552;
-  fra.me.meth = LOCATE_parser___ReduceAction19___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1552 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction19____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos23] = 1;
-  return;
-}
 void parser___ReduceAction20___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
@@ -6940,10 +6819,11 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1556;
+  fra.me.line = 1559;
   fra.me.meth = LOCATE_parser___ReduceAction20___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -6953,32 +6833,32 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1558 */
+  /* parser/parser.nit:1561 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1559 */
+  /* parser/parser.nit:1562 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1560 */
+  /* parser/parser.nit:1563 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1561 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1562 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1564 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1564 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1565 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1567 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1567);
   }
-  /* ./parser//parser.nit:1566 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1569 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1569);
   }
-  /* ./parser//parser.nit:1567 */
+  /* parser/parser.nit:1570 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1568 */
+  /* parser/parser.nit:1571 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -6987,55 +6867,31 @@ void parser___ReduceAction20___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1569 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:1572 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1571 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1576 */
+  /* parser/parser.nit:1574 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1579 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1577 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction20____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1580 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1577);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1580);
   }
-  REGB0 = ATTR_parser___ReduceAction20____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction20___init(val_t p0, val_t p1, int* init_table){
-  int itpos24 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction20].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;
-  fra.me.line = 1580;
-  fra.me.meth = LOCATE_parser___ReduceAction20___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1580 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction20____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos24] = 1;
-  return;
-}
 void parser___ReduceAction21___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -7043,10 +6899,11 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1584;
+  fra.me.line = 1585;
   fra.me.meth = LOCATE_parser___ReduceAction21___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7057,40 +6914,40 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1586 */
+  /* parser/parser.nit:1587 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1587 */
+  /* parser/parser.nit:1588 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1588 */
+  /* parser/parser.nit:1589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1589 */
+  /* parser/parser.nit:1590 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1590 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1591 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1593 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1591 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1592 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1594 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1593);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1594);
   }
-  /* ./parser//parser.nit:1595 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1596 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1595);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1596);
   }
-  /* ./parser//parser.nit:1597 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1598 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1597);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1598);
   }
-  /* ./parser//parser.nit:1598 */
+  /* parser/parser.nit:1599 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1599 */
+  /* parser/parser.nit:1600 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7099,55 +6956,31 @@ void parser___ReduceAction21___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1600 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1601 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1602 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1607 */
+  /* parser/parser.nit:1603 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1608 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1608 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction21____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1609 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1608);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1609);
   }
-  REGB0 = ATTR_parser___ReduceAction21____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction21___init(val_t p0, val_t p1, int* init_table){
-  int itpos25 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction21].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos25]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1611;
-  fra.me.meth = LOCATE_parser___ReduceAction21___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1611 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction21____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos25] = 1;
-  return;
-}
 void parser___ReduceAction22___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -7155,10 +6988,11 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1615;
+  fra.me.line = 1614;
   fra.me.meth = LOCATE_parser___ReduceAction22___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7169,43 +7003,43 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1617 */
+  /* parser/parser.nit:1616 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1618 */
+  /* parser/parser.nit:1617 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1619 */
+  /* parser/parser.nit:1618 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1620 */
+  /* parser/parser.nit:1619 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1621 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1622 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1624 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1620 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1621 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1623 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1623);
   }
-  /* ./parser//parser.nit:1625 */
+  /* parser/parser.nit:1624 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1627 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1626 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1626);
   }
-  /* ./parser//parser.nit:1629 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1628 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1629);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1628);
   }
-  /* ./parser//parser.nit:1630 */
+  /* parser/parser.nit:1629 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1631 */
+  /* parser/parser.nit:1630 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7214,55 +7048,31 @@ void parser___ReduceAction22___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1632 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1631 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1634 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1639 */
+  /* parser/parser.nit:1633 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1638 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1640 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction22____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1639 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1640);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1639);
   }
-  REGB0 = ATTR_parser___ReduceAction22____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction22___init(val_t p0, val_t p1, int* init_table){
-  int itpos26 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction22].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos26]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1643;
-  fra.me.meth = LOCATE_parser___ReduceAction22___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1643 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction22____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos26] = 1;
-  return;
-}
 void parser___ReduceAction23___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -7270,10 +7080,11 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1647;
+  fra.me.line = 1644;
   fra.me.meth = LOCATE_parser___ReduceAction23___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7285,51 +7096,51 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1649 */
+  /* parser/parser.nit:1646 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1650 */
+  /* parser/parser.nit:1647 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1651 */
+  /* parser/parser.nit:1648 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1652 */
+  /* parser/parser.nit:1649 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1653 */
+  /* parser/parser.nit:1650 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1654 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1655 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1657 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1651 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1652 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1654 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1654);
   }
-  /* ./parser//parser.nit:1659 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1656 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1656);
   }
-  /* ./parser//parser.nit:1660 */
+  /* parser/parser.nit:1657 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1662 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1659 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1662);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1659);
   }
-  /* ./parser//parser.nit:1664 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1661 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1664);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1661);
   }
-  /* ./parser//parser.nit:1665 */
+  /* parser/parser.nit:1662 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1666 */
+  /* parser/parser.nit:1663 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7338,55 +7149,31 @@ void parser___ReduceAction23___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1667 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    /* parser/parser.nit:1664 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1669 */
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1674 */
+  /* parser/parser.nit:1666 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1671 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1675 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction23____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1672 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1675);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1672);
   }
-  REGB0 = ATTR_parser___ReduceAction23____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction23___init(val_t p0, val_t p1, int* init_table){
-  int itpos27 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction23].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos27]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1678;
-  fra.me.meth = LOCATE_parser___ReduceAction23___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1678 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction23____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos27] = 1;
-  return;
-}
 void parser___ReduceAction24___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -7394,10 +7181,11 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1682;
+  fra.me.line = 1677;
   fra.me.meth = LOCATE_parser___ReduceAction24___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7408,36 +7196,36 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1684 */
+  /* parser/parser.nit:1679 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1685 */
+  /* parser/parser.nit:1680 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1686 */
+  /* parser/parser.nit:1681 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1687 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1688 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1689 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1691 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1682 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1683 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1684 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1686 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1686);
   }
-  /* ./parser//parser.nit:1692 */
+  /* parser/parser.nit:1687 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:1693 */
-  fra.me.REG[7] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
-  /* ./parser//parser.nit:1697 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1688 */
+  fra.me.REG[7] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[7]);
+  /* parser/parser.nit:1692 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1692);
   }
-  /* ./parser//parser.nit:1698 */
+  /* parser/parser.nit:1693 */
   REGB0 = TAG_Bool(fra.me.REG[7]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7446,16 +7234,16 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[7])(fra.me.REG[7], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1699 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
+    /* parser/parser.nit:1694 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[7]);
   }
-  /* ./parser//parser.nit:1701 */
+  /* parser/parser.nit:1696 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7464,55 +7252,31 @@ void parser___ReduceAction24___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1702 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:1697 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1704 */
-  fra.me.REG[6] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:1709 */
+  /* parser/parser.nit:1699 */
+  fra.me.REG[6] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:1704 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:1710 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction24____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1705 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1705);
   }
-  REGB0 = ATTR_parser___ReduceAction24____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction24___init(val_t p0, val_t p1, int* init_table){
-  int itpos28 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction24].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos28]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1713;
-  fra.me.meth = LOCATE_parser___ReduceAction24___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1713 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction24____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos28] = 1;
-  return;
-}
 void parser___ReduceAction25___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -7520,10 +7284,11 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1717;
+  fra.me.line = 1710;
   fra.me.meth = LOCATE_parser___ReduceAction25___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7535,44 +7300,44 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1719 */
+  /* parser/parser.nit:1712 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1720 */
+  /* parser/parser.nit:1713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1721 */
+  /* parser/parser.nit:1714 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1722 */
+  /* parser/parser.nit:1715 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1723 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1724 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1726 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1716 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1717 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1719 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1719);
   }
-  /* ./parser//parser.nit:1727 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1729 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1720 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1722 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1722);
   }
-  /* ./parser//parser.nit:1730 */
+  /* parser/parser.nit:1723 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1731 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1735 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1724 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:1728 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1735);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1728);
   }
-  /* ./parser//parser.nit:1736 */
+  /* parser/parser.nit:1729 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7581,16 +7346,16 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1737 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    /* parser/parser.nit:1730 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1739 */
+  /* parser/parser.nit:1732 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7599,55 +7364,31 @@ void parser___ReduceAction25___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1740 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1733 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1742 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1747 */
+  /* parser/parser.nit:1735 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1740 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1748 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction25____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1741 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1748);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1741);
   }
-  REGB0 = ATTR_parser___ReduceAction25____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction25___init(val_t p0, val_t p1, int* init_table){
-  int itpos29 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction25].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos29]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1751;
-  fra.me.meth = LOCATE_parser___ReduceAction25___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1751 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction25____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos29] = 1;
-  return;
-}
 void parser___ReduceAction26___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
@@ -7655,10 +7396,11 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1755;
+  fra.me.line = 1746;
   fra.me.meth = LOCATE_parser___ReduceAction26___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7669,47 +7411,47 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1757 */
+  /* parser/parser.nit:1748 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1758 */
+  /* parser/parser.nit:1749 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1759 */
+  /* parser/parser.nit:1750 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1760 */
+  /* parser/parser.nit:1751 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1761 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1762 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1764 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1752 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1753 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1755 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1755);
   }
-  /* ./parser//parser.nit:1765 */
+  /* parser/parser.nit:1756 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:1766 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1768 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1757 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1759 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1759);
   }
-  /* ./parser//parser.nit:1769 */
+  /* parser/parser.nit:1760 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1770 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1774 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1761 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:1765 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1765);
   }
-  /* ./parser//parser.nit:1775 */
+  /* parser/parser.nit:1766 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7718,16 +7460,16 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1776 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
+    /* parser/parser.nit:1767 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1778 */
+  /* parser/parser.nit:1769 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7736,55 +7478,31 @@ void parser___ReduceAction26___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1779 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1770 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1781 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1786 */
+  /* parser/parser.nit:1772 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1777 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1787 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction26____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1778 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1787);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1778);
   }
-  REGB0 = ATTR_parser___ReduceAction26____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction26___init(val_t p0, val_t p1, int* init_table){
-  int itpos30 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction26].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos30]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1790;
-  fra.me.meth = LOCATE_parser___ReduceAction26___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1790 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction26____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos30] = 1;
-  return;
-}
 void parser___ReduceAction27___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -7792,10 +7510,11 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1794;
+  fra.me.line = 1783;
   fra.me.meth = LOCATE_parser___ReduceAction27___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7807,55 +7526,55 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1796 */
+  /* parser/parser.nit:1785 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1797 */
+  /* parser/parser.nit:1786 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1798 */
+  /* parser/parser.nit:1787 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1799 */
+  /* parser/parser.nit:1788 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1800 */
+  /* parser/parser.nit:1789 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1801 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1802 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1804 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1790 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1791 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1793 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1793);
   }
-  /* ./parser//parser.nit:1806 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1795 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1806);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1795);
   }
-  /* ./parser//parser.nit:1807 */
+  /* parser/parser.nit:1796 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1808 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1810 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1797 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1799 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1810);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1799);
   }
-  /* ./parser//parser.nit:1811 */
+  /* parser/parser.nit:1800 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:1812 */
-  fra.me.REG[5] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
-  /* ./parser//parser.nit:1816 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1801 */
+  fra.me.REG[5] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[5]);
+  /* parser/parser.nit:1805 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1816);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1805);
   }
-  /* ./parser//parser.nit:1817 */
+  /* parser/parser.nit:1806 */
   REGB0 = TAG_Bool(fra.me.REG[5]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7864,16 +7583,16 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1818 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
+    /* parser/parser.nit:1807 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[5]);
   }
-  /* ./parser//parser.nit:1820 */
+  /* parser/parser.nit:1809 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -7882,55 +7601,31 @@ void parser___ReduceAction27___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1821 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    /* parser/parser.nit:1810 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1823 */
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1828 */
+  /* parser/parser.nit:1812 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1817 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1829 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction27____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1818 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1829);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1818);
   }
-  REGB0 = ATTR_parser___ReduceAction27____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction27___init(val_t p0, val_t p1, int* init_table){
-  int itpos31 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction27].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos31]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1832;
-  fra.me.meth = LOCATE_parser___ReduceAction27___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1832 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction27____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos31] = 1;
-  return;
-}
 void parser___ReduceAction28___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -7938,10 +7633,11 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1836;
+  fra.me.line = 1823;
   fra.me.meth = LOCATE_parser___ReduceAction28___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -7953,47 +7649,47 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1838 */
+  /* parser/parser.nit:1825 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1839 */
+  /* parser/parser.nit:1826 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1840 */
+  /* parser/parser.nit:1827 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1841 */
+  /* parser/parser.nit:1828 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1842 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1843 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1845 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1829 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1830 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1832 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1832);
   }
-  /* ./parser//parser.nit:1846 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1848 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1833 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1835 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1835);
   }
-  /* ./parser//parser.nit:1849 */
+  /* parser/parser.nit:1836 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[4]);
   fra.me.REG[8] = fra.me.REG[4];
-  /* ./parser//parser.nit:1850 */
-  fra.me.REG[8] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
-  /* ./parser//parser.nit:1854 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1837 */
+  fra.me.REG[8] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[8]);
+  /* parser/parser.nit:1841 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1841);
   }
-  /* ./parser//parser.nit:1855 */
+  /* parser/parser.nit:1842 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
   fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:1856 */
+  /* parser/parser.nit:1843 */
   REGB0 = TAG_Bool(fra.me.REG[8]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8002,16 +7698,16 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[8])(fra.me.REG[8], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1857 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
+    /* parser/parser.nit:1844 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[8]);
   }
-  /* ./parser//parser.nit:1859 */
+  /* parser/parser.nit:1846 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8020,55 +7716,31 @@ void parser___ReduceAction28___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1860 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
+    /* parser/parser.nit:1847 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[7])(fra.me.REG[7], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1862 */
-  fra.me.REG[7] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:1867 */
+  /* parser/parser.nit:1849 */
+  fra.me.REG[7] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[6], fra.me.REG[7]);
+  /* parser/parser.nit:1854 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:1868 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction28____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1855 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1855);
   }
-  REGB0 = ATTR_parser___ReduceAction28____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction28___init(val_t p0, val_t p1, int* init_table){
-  int itpos32 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction28].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos32]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1871;
-  fra.me.meth = LOCATE_parser___ReduceAction28___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1871 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction28____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos32] = 1;
-  return;
-}
 void parser___ReduceAction29___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
@@ -8076,10 +7748,11 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1875;
+  fra.me.line = 1860;
   fra.me.meth = LOCATE_parser___ReduceAction29___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8092,55 +7765,55 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1877 */
+  /* parser/parser.nit:1862 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1878 */
+  /* parser/parser.nit:1863 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1879 */
+  /* parser/parser.nit:1864 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1880 */
+  /* parser/parser.nit:1865 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1881 */
+  /* parser/parser.nit:1866 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1882 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1883 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1885 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1867 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1868 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1870 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1870);
   }
-  /* ./parser//parser.nit:1887 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1872 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1872);
   }
-  /* ./parser//parser.nit:1888 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1890 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1873 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1875 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1875);
   }
-  /* ./parser//parser.nit:1891 */
+  /* parser/parser.nit:1876 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
   fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:1892 */
-  fra.me.REG[9] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
-  /* ./parser//parser.nit:1896 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1877 */
+  fra.me.REG[9] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[9]);
+  /* parser/parser.nit:1881 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1896);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1881);
   }
-  /* ./parser//parser.nit:1897 */
+  /* parser/parser.nit:1882 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
   fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:1898 */
+  /* parser/parser.nit:1883 */
   REGB0 = TAG_Bool(fra.me.REG[9]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8149,16 +7822,16 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[9])(fra.me.REG[9], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1899 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
+    /* parser/parser.nit:1884 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[9]);
   }
-  /* ./parser//parser.nit:1901 */
+  /* parser/parser.nit:1886 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8167,55 +7840,31 @@ void parser___ReduceAction29___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1902 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    /* parser/parser.nit:1887 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1904 */
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1909 */
+  /* parser/parser.nit:1889 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[6], fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1894 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1910 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction29____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1895 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1910);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1895);
   }
-  REGB0 = ATTR_parser___ReduceAction29____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction29___init(val_t p0, val_t p1, int* init_table){
-  int itpos33 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction29].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos33]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1913;
-  fra.me.meth = LOCATE_parser___ReduceAction29___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1913 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction29____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos33] = 1;
-  return;
-}
 void parser___ReduceAction30___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
@@ -8223,10 +7872,11 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1917;
+  fra.me.line = 1900;
   fra.me.meth = LOCATE_parser___ReduceAction30___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8238,58 +7888,58 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1919 */
+  /* parser/parser.nit:1902 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1920 */
+  /* parser/parser.nit:1903 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1921 */
+  /* parser/parser.nit:1904 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1922 */
+  /* parser/parser.nit:1905 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1923 */
+  /* parser/parser.nit:1906 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1924 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1925 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1927 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1907 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1908 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1910 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1927);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1910);
   }
-  /* ./parser//parser.nit:1928 */
+  /* parser/parser.nit:1911 */
   fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[6]);
   fra.me.REG[7] = fra.me.REG[6];
-  /* ./parser//parser.nit:1930 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1913 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1913);
   }
-  /* ./parser//parser.nit:1931 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1933 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1914 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1916 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1933);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1916);
   }
-  /* ./parser//parser.nit:1934 */
+  /* parser/parser.nit:1917 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1935 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1939 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1918 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:1922 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1939);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1922);
   }
-  /* ./parser//parser.nit:1940 */
+  /* parser/parser.nit:1923 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
   fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:1941 */
+  /* parser/parser.nit:1924 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8298,16 +7948,16 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB1 = CALL_standard___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)) {
-    /* ./parser//parser.nit:1942 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
+    /* parser/parser.nit:1925 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1944 */
+  /* parser/parser.nit:1927 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8316,55 +7966,31 @@ void parser___ReduceAction30___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1945 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
+    /* parser/parser.nit:1928 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[8])(fra.me.REG[8], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1947 */
-  fra.me.REG[8] = NEW_AModule_parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:1952 */
+  /* parser/parser.nit:1930 */
+  fra.me.REG[8] = NEW_AModule_parser___parser_prod___AModule___init_amodule(NIT_NULL, fra.me.REG[7], fra.me.REG[8]);
+  /* parser/parser.nit:1935 */
   fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:1953 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction30____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1936 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1953);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1936);
   }
-  REGB0 = ATTR_parser___ReduceAction30____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction30___init(val_t p0, val_t p1, int* init_table){
-  int itpos34 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction30].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos34]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 1956;
-  fra.me.meth = LOCATE_parser___ReduceAction30___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:1956 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction30____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos34] = 1;
-  return;
-}
 void parser___ReduceAction31___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
@@ -8372,10 +7998,11 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 1960;
+  fra.me.line = 1941;
   fra.me.meth = LOCATE_parser___ReduceAction31___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8388,66 +8015,66 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:1962 */
+  /* parser/parser.nit:1943 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:1963 */
+  /* parser/parser.nit:1944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1964 */
+  /* parser/parser.nit:1945 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1965 */
+  /* parser/parser.nit:1946 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1966 */
+  /* parser/parser.nit:1947 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1967 */
+  /* parser/parser.nit:1948 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:1968 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1969 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1971 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AModuledecl, ID_AModuledecl)) /*cast nullable AModuledecl*/;
+  /* parser/parser.nit:1949 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1950 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1952 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AModuledecl, ID_parser___parser_nodes___AModuledecl)) /*cast nullable AModuledecl*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1952);
   }
-  /* ./parser//parser.nit:1973 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1954 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1954);
   }
-  /* ./parser//parser.nit:1974 */
+  /* parser/parser.nit:1955 */
   fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[6]);
   fra.me.REG[8] = fra.me.REG[6];
-  /* ./parser//parser.nit:1976 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1957 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1976);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1957);
   }
-  /* ./parser//parser.nit:1977 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:1979 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:1958 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:1960 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1960);
   }
-  /* ./parser//parser.nit:1980 */
+  /* parser/parser.nit:1961 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:1981 */
-  fra.me.REG[6] = NEW_ATopClassdef_parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
-  /* ./parser//parser.nit:1985 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AClassdef, ID_AClassdef)) /*cast nullable AClassdef*/;
+  /* parser/parser.nit:1962 */
+  fra.me.REG[6] = NEW_ATopClassdef_parser___parser_prod___ATopClassdef___init_atopclassdef(fra.me.REG[6]);
+  /* parser/parser.nit:1966 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AClassdef, ID_parser___parser_nodes___AClassdef)) /*cast nullable AClassdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 1985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1966);
   }
-  /* ./parser//parser.nit:1986 */
+  /* parser/parser.nit:1967 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[5]);
   fra.me.REG[9] = fra.me.REG[5];
-  /* ./parser//parser.nit:1987 */
+  /* parser/parser.nit:1968 */
   REGB0 = TAG_Bool(fra.me.REG[6]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8456,16 +8083,16 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[6])(fra.me.REG[6], NIT_NULL);
+      REGB1 = CALL_standard___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)) {
-    /* ./parser//parser.nit:1988 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
+    /* parser/parser.nit:1969 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[6]);
   }
-  /* ./parser//parser.nit:1990 */
+  /* parser/parser.nit:1971 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8474,65 +8101,42 @@ void parser___ReduceAction31___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:1991 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
+    /* parser/parser.nit:1972 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[9])(fra.me.REG[9], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:1993 */
-  fra.me.REG[9] = NEW_AModule_parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* ./parser//parser.nit:1998 */
+  /* parser/parser.nit:1974 */
+  fra.me.REG[9] = NEW_AModule_parser___parser_prod___AModule___init_amodule(fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
+  /* parser/parser.nit:1979 */
   fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:1999 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction31____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:1980 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1999);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 1980);
   }
-  REGB0 = ATTR_parser___ReduceAction31____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction31___init(val_t p0, val_t p1, int* init_table){
-  int itpos35 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction31].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos35]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2002;
-  fra.me.meth = LOCATE_parser___ReduceAction31___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2002 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction31____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos35] = 1;
-  return;
-}
 void parser___ReduceAction32___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2006;
+  fra.me.line = 1985;
   fra.me.meth = LOCATE_parser___ReduceAction32___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8541,86 +8145,63 @@ void parser___ReduceAction32___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2008 */
+  /* parser/parser.nit:1987 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2009 */
+  /* parser/parser.nit:1988 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2010 */
+  /* parser/parser.nit:1989 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2011 */
+  /* parser/parser.nit:1990 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2012 */
+  /* parser/parser.nit:1991 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2013 */
+  /* parser/parser.nit:1992 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2015 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:1994 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2015);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1994);
   }
-  /* ./parser//parser.nit:2017 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwmodule, ID_TKwmodule)) /*cast nullable TKwmodule*/;
+  /* parser/parser.nit:1996 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwmodule, ID_parser___parser_nodes___TKwmodule)) /*cast nullable TKwmodule*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1996);
   }
-  /* ./parser//parser.nit:2019 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:1998 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 1998);
   }
-  /* ./parser//parser.nit:2020 */
-  fra.me.REG[3] = NEW_AModuledecl_parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2025 */
+  /* parser/parser.nit:1999 */
+  fra.me.REG[3] = NEW_AModuledecl_parser___parser_prod___AModuledecl___init_amoduledecl(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:2004 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2026 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction32____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2005 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2026);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2005);
   }
-  REGB0 = ATTR_parser___ReduceAction32____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction32___init(val_t p0, val_t p1, int* init_table){
-  int itpos36 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction32].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos36]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2029;
-  fra.me.meth = LOCATE_parser___ReduceAction32___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2029 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction32____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos36] = 1;
-  return;
-}
 void parser___ReduceAction33___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2033;
+  fra.me.line = 2010;
   fra.me.meth = LOCATE_parser___ReduceAction33___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8630,88 +8211,65 @@ void parser___ReduceAction33___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2035 */
+  /* parser/parser.nit:2012 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2036 */
+  /* parser/parser.nit:2013 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2037 */
+  /* parser/parser.nit:2014 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2038 */
+  /* parser/parser.nit:2015 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2039 */
+  /* parser/parser.nit:2016 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2040 */
+  /* parser/parser.nit:2017 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2041 */
+  /* parser/parser.nit:2018 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2043 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2020 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2043);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2020);
   }
-  /* ./parser//parser.nit:2045 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:2022 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2045);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2022);
   }
-  /* ./parser//parser.nit:2047 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:2024 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AModuleName, ID_parser___parser_nodes___AModuleName)) /*cast nullable AModuleName*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2047);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2024);
   }
-  /* ./parser//parser.nit:2048 */
-  fra.me.REG[3] = NEW_AStdImport_parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2053 */
+  /* parser/parser.nit:2025 */
+  fra.me.REG[3] = NEW_AStdImport_parser___parser_prod___AStdImport___init_astdimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:2030 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2054 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction33____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2031 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2054);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2031);
   }
-  REGB0 = ATTR_parser___ReduceAction33____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction33___init(val_t p0, val_t p1, int* init_table){
-  int itpos37 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction33].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos37]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2057;
-  fra.me.meth = LOCATE_parser___ReduceAction33___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2057 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction33____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos37] = 1;
-  return;
-}
 void parser___ReduceAction34___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2061;
+  fra.me.line = 2036;
   fra.me.meth = LOCATE_parser___ReduceAction34___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8721,109 +8279,86 @@ void parser___ReduceAction34___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2063 */
+  /* parser/parser.nit:2038 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2064 */
+  /* parser/parser.nit:2039 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2065 */
+  /* parser/parser.nit:2040 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2066 */
+  /* parser/parser.nit:2041 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2067 */
+  /* parser/parser.nit:2042 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2068 */
+  /* parser/parser.nit:2043 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2069 */
+  /* parser/parser.nit:2044 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2071 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2046 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2071);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2046);
   }
-  /* ./parser//parser.nit:2073 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:2048 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2048);
   }
-  /* ./parser//parser.nit:2075 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwend, ID_TKwend)) /*cast nullable TKwend*/;
+  /* parser/parser.nit:2050 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2050);
   }
-  /* ./parser//parser.nit:2076 */
-  fra.me.REG[3] = NEW_ANoImport_parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2081 */
+  /* parser/parser.nit:2051 */
+  fra.me.REG[3] = NEW_ANoImport_parser___parser_prod___ANoImport___init_anoimport(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:2056 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2082 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction34____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2057 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2082);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2057);
   }
-  REGB0 = ATTR_parser___ReduceAction34____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction34___init(val_t p0, val_t p1, int* init_table){
-  int itpos38 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction34].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction35___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} 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;
-  fra.me.line = 2085;
-  fra.me.meth = LOCATE_parser___ReduceAction34___init;
+  fra.me.line = 2062;
+  fra.me.meth = LOCATE_parser___ReduceAction35___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2085 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction34____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos38] = 1;
-  return;
-}
-void parser___ReduceAction35___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2089;
-  fra.me.meth = LOCATE_parser___ReduceAction35___action;
-  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[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.nit:2091 */
+  /* parser/parser.nit:2064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2092 */
+  /* parser/parser.nit:2065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2093 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2095 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_APropdef, ID_APropdef)) /*cast nullable APropdef*/;
+  /* parser/parser.nit:2066 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2068 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___APropdef, ID_parser___parser_nodes___APropdef)) /*cast nullable APropdef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2068);
   }
-  /* ./parser//parser.nit:2096 */
+  /* parser/parser.nit:2069 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -8832,123 +8367,77 @@ void parser___ReduceAction35___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2097 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:2070 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2099 */
-  fra.me.REG[4] = NEW_AMainClassdef_parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
-  /* ./parser//parser.nit:2102 */
+  /* parser/parser.nit:2072 */
+  fra.me.REG[4] = NEW_AMainClassdef_parser___parser_prod___AMainClassdef___init_amainclassdef(fra.me.REG[4]);
+  /* parser/parser.nit:2075 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2103 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction35____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2076 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2103);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2076);
   }
-  REGB0 = ATTR_parser___ReduceAction35____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction35___init(val_t p0, val_t p1, int* init_table){
-  int itpos39 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction35].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos39]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2106;
-  fra.me.meth = LOCATE_parser___ReduceAction35___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2106 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction35____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos39] = 1;
-  return;
-}
 void parser___ReduceAction36___action(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;
-  fra.me.line = 2110;
+  fra.me.line = 2081;
   fra.me.meth = LOCATE_parser___ReduceAction36___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2112 */
+  /* parser/parser.nit:2083 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2113 */
+  /* parser/parser.nit:2084 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2114 */
+  /* parser/parser.nit:2085 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2115 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction36____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2086 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2115);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2086);
   }
-  REGB0 = ATTR_parser___ReduceAction36____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction36___init(val_t p0, val_t p1, int* init_table){
-  int itpos40 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction36].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos40]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2118;
-  fra.me.meth = LOCATE_parser___ReduceAction36___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2118 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction36____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos40] = 1;
-  return;
-}
 void parser___ReduceAction37___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2122;
+  fra.me.line = 2091;
   fra.me.meth = LOCATE_parser___ReduceAction37___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -8956,68 +8445,45 @@ void parser___ReduceAction37___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2124 */
+  /* parser/parser.nit:2093 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2125 */
+  /* parser/parser.nit:2094 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2126 */
+  /* parser/parser.nit:2095 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2128 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:2097 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2128);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2097);
   }
-  /* ./parser//parser.nit:2129 */
-  fra.me.REG[3] = NEW_AMainMethPropdef_parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:2133 */
+  /* parser/parser.nit:2098 */
+  fra.me.REG[3] = NEW_AMainMethPropdef_parser___parser_prod___AMainMethPropdef___init_amainmethpropdef(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:2102 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2134 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction37____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2103 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2134);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2103);
   }
-  REGB0 = ATTR_parser___ReduceAction37____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction37___init(val_t p0, val_t p1, int* init_table){
-  int itpos41 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction37].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos41]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2137;
-  fra.me.meth = LOCATE_parser___ReduceAction37___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2137 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction37____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos41] = 1;
-  return;
-}
 void parser___ReduceAction39___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2141;
+  fra.me.line = 2108;
   fra.me.meth = LOCATE_parser___ReduceAction39___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9028,104 +8494,88 @@ void parser___ReduceAction39___action(val_t p0, val_t p1){
   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;
-  /* ./parser//parser.nit:2143 */
+  /* parser/parser.nit:2110 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2144 */
+  /* parser/parser.nit:2111 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2145 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2146 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2147 */
+  /* parser/parser.nit:2112 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2148 */
+  /* parser/parser.nit:2113 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2149 */
+  /* parser/parser.nit:2114 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2150 */
+  /* parser/parser.nit:2115 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2116 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2151 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2152 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2153 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2155 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2117 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2118 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2119 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2120 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2122 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2122);
   }
-  /* ./parser//parser.nit:2157 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2124 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2124);
   }
-  /* ./parser//parser.nit:2159 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2126 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2159);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2126);
   }
-  /* ./parser//parser.nit:2161 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2128 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2128);
   }
-  /* ./parser//parser.nit:2162 */
-  fra.me.REG[9] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7], fra.me.REG[8], fra.me.REG[9]);
-  /* ./parser//parser.nit:2172 */
-  fra.me.REG[2] = fra.me.REG[9];
-  /* ./parser//parser.nit:2173 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction39____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2130 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2130);
+  }
+  /* parser/parser.nit:2131 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10], fra.me.REG[3]);
+  /* parser/parser.nit:2142 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2143 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2173);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2143);
   }
-  REGB0 = ATTR_parser___ReduceAction39____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction39___init(val_t p0, val_t p1, int* init_table){
-  int itpos42 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction39].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos42]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2176;
-  fra.me.meth = LOCATE_parser___ReduceAction39___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2176 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction39____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos42] = 1;
-  return;
-}
 void parser___ReduceAction40___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2180;
+  fra.me.line = 2148;
   fra.me.meth = LOCATE_parser___ReduceAction40___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9137,112 +8587,96 @@ void parser___ReduceAction40___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2182 */
+  /* parser/parser.nit:2150 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2183 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2184 */
+  /* parser/parser.nit:2151 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2185 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2186 */
+  /* parser/parser.nit:2152 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2187 */
+  /* parser/parser.nit:2153 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2188 */
+  /* parser/parser.nit:2154 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2155 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2189 */
+  /* parser/parser.nit:2156 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2190 */
+  /* parser/parser.nit:2157 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2191 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2192 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2193 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2195 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2158 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2159 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2160 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2161 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2163 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2163);
+  }
+  /* parser/parser.nit:2165 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2195);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2165);
   }
-  /* ./parser//parser.nit:2197 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2167 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2197);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2167);
   }
-  /* ./parser//parser.nit:2199 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2169 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2199);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2169);
   }
-  /* ./parser//parser.nit:2201 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2171 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2201);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2171);
   }
-  /* ./parser//parser.nit:2203 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2173 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2203);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2173);
   }
-  /* ./parser//parser.nit:2204 */
-  fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2214 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2215 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction40____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2174 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:2185 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2186 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2215);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2186);
   }
-  REGB0 = ATTR_parser___ReduceAction40____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction40___init(val_t p0, val_t p1, int* init_table){
-  int itpos43 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction40].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos43]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2218;
-  fra.me.meth = LOCATE_parser___ReduceAction40___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2218 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction40____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos43] = 1;
-  return;
-}
 void parser___ReduceAction41___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2222;
+  fra.me.line = 2191;
   fra.me.meth = LOCATE_parser___ReduceAction41___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9254,115 +8688,99 @@ void parser___ReduceAction41___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2224 */
+  /* parser/parser.nit:2193 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2225 */
+  /* parser/parser.nit:2194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2226 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2227 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2228 */
+  /* parser/parser.nit:2195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2229 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2230 */
+  /* parser/parser.nit:2196 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2231 */
+  /* parser/parser.nit:2198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2232 */
+  /* parser/parser.nit:2199 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2200 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2233 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2234 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2235 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2237 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2201 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2202 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2203 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2204 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2206 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2206);
   }
-  /* ./parser//parser.nit:2239 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2208 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2239);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2208);
   }
-  /* ./parser//parser.nit:2241 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2210 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2241);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2210);
   }
-  /* ./parser//parser.nit:2243 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2212 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2243);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2212);
   }
-  /* ./parser//parser.nit:2245 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2214 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2214);
   }
-  /* ./parser//parser.nit:2246 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
-  fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:2247 */
-  fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2257 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2258 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction41____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2215 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
+  fra.me.REG[9] = fra.me.REG[4];
+  /* parser/parser.nit:2217 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2217);
+  }
+  /* parser/parser.nit:2218 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:2229 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2230 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2258);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2230);
   }
-  REGB0 = ATTR_parser___ReduceAction41____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction41___init(val_t p0, val_t p1, int* init_table){
-  int itpos44 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction41].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos44]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2261;
-  fra.me.meth = LOCATE_parser___ReduceAction41___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2261 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction41____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos44] = 1;
-  return;
-}
 void parser___ReduceAction42___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2265;
+  fra.me.line = 2235;
   fra.me.meth = LOCATE_parser___ReduceAction42___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9375,123 +8793,107 @@ void parser___ReduceAction42___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2267 */
+  /* parser/parser.nit:2237 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2268 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2269 */
+  /* parser/parser.nit:2238 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2270 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2271 */
+  /* parser/parser.nit:2239 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2272 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2273 */
+  /* parser/parser.nit:2240 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2241 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2274 */
+  /* parser/parser.nit:2242 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2243 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2275 */
+  /* parser/parser.nit:2244 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2276 */
+  /* parser/parser.nit:2245 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2277 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2278 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2279 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2281 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2246 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2247 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2248 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2249 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2251 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2251);
   }
-  /* ./parser//parser.nit:2283 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2253 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2253);
   }
-  /* ./parser//parser.nit:2285 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2255 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2285);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2255);
   }
-  /* ./parser//parser.nit:2287 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2257 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2257);
   }
-  /* ./parser//parser.nit:2289 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2259 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2259);
   }
-  /* ./parser//parser.nit:2291 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2261 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2261);
   }
-  /* ./parser//parser.nit:2292 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[3]);
-  fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:2293 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2303 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2304 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction42____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2262 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
+  fra.me.REG[10] = fra.me.REG[4];
+  /* parser/parser.nit:2264 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2264);
+  }
+  /* parser/parser.nit:2265 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2276 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2277 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2304);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2277);
   }
-  REGB0 = ATTR_parser___ReduceAction42____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction42___init(val_t p0, val_t p1, int* init_table){
-  int itpos45 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction42].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos45]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2307;
-  fra.me.meth = LOCATE_parser___ReduceAction42___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2307 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction42____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos45] = 1;
-  return;
-}
 void parser___ReduceAction43___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2311;
+  fra.me.line = 2282;
   fra.me.meth = LOCATE_parser___ReduceAction43___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9503,115 +8905,99 @@ void parser___ReduceAction43___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2313 */
+  /* parser/parser.nit:2284 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2314 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2315 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2316 */
+  /* parser/parser.nit:2285 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2317 */
+  /* parser/parser.nit:2286 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2318 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2319 */
+  /* parser/parser.nit:2287 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2288 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2320 */
+  /* parser/parser.nit:2289 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2321 */
+  /* parser/parser.nit:2290 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2291 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2322 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2323 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2324 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2326 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2292 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2293 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2294 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2295 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2297 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2326);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2297);
   }
-  /* ./parser//parser.nit:2328 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2299 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2299);
   }
-  /* ./parser//parser.nit:2330 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2301 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2301);
   }
-  /* ./parser//parser.nit:2332 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2303 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2303);
   }
-  /* ./parser//parser.nit:2334 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2305 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2305);
   }
-  /* ./parser//parser.nit:2335 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[3]);
-  fra.me.REG[9] = fra.me.REG[3];
-  /* ./parser//parser.nit:2336 */
-  fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2346 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2347 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction43____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2306 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
+  fra.me.REG[10] = fra.me.REG[4];
+  /* parser/parser.nit:2308 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2347);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2308);
   }
-  REGB0 = ATTR_parser___ReduceAction43____goto(fra.me.REG[0]);
+  /* parser/parser.nit:2309 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:2320 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2321 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2321);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction43___init(val_t p0, val_t p1, int* init_table){
-  int itpos46 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction43].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos46]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2350;
-  fra.me.meth = LOCATE_parser___ReduceAction43___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2350 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction43____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos46] = 1;
-  return;
-}
 void parser___ReduceAction44___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2354;
+  fra.me.line = 2326;
   fra.me.meth = LOCATE_parser___ReduceAction44___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9624,123 +9010,107 @@ void parser___ReduceAction44___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2356 */
+  /* parser/parser.nit:2328 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2357 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2358 */
+  /* parser/parser.nit:2329 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2359 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2360 */
+  /* parser/parser.nit:2330 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2361 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2362 */
+  /* parser/parser.nit:2331 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2332 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2363 */
+  /* parser/parser.nit:2333 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2334 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2364 */
+  /* parser/parser.nit:2335 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2365 */
+  /* parser/parser.nit:2336 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2366 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2367 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2368 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2370 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2337 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2338 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2339 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2340 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2342 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2342);
+  }
+  /* parser/parser.nit:2344 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2344);
   }
-  /* ./parser//parser.nit:2372 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2346 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2372);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2346);
   }
-  /* ./parser//parser.nit:2374 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2348 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2348);
   }
-  /* ./parser//parser.nit:2376 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2350 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2376);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2350);
   }
-  /* ./parser//parser.nit:2378 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2352 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2352);
   }
-  /* ./parser//parser.nit:2380 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2353 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
+  fra.me.REG[11] = fra.me.REG[4];
+  /* parser/parser.nit:2355 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2380);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2355);
   }
-  /* ./parser//parser.nit:2381 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
-  fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2382 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2392 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2393 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction44____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2356 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2367 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2368 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2368);
   }
-  REGB0 = ATTR_parser___ReduceAction44____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction44___init(val_t p0, val_t p1, int* init_table){
-  int itpos47 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction44].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos47]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2396;
-  fra.me.meth = LOCATE_parser___ReduceAction44___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2396 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction44____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos47] = 1;
-  return;
-}
 void parser___ReduceAction45___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2400;
+  fra.me.line = 2373;
   fra.me.meth = LOCATE_parser___ReduceAction45___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9753,126 +9123,110 @@ void parser___ReduceAction45___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2402 */
+  /* parser/parser.nit:2375 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2403 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2404 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2405 */
+  /* parser/parser.nit:2376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2406 */
+  /* parser/parser.nit:2377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2407 */
+  /* parser/parser.nit:2378 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2379 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2408 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2409 */
+  /* parser/parser.nit:2380 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2410 */
+  /* parser/parser.nit:2381 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2411 */
+  /* parser/parser.nit:2382 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2383 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2412 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2413 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2414 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2416 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2384 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2385 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2386 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2387 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2389 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2389);
   }
-  /* ./parser//parser.nit:2418 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2391 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2391);
   }
-  /* ./parser//parser.nit:2420 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2393 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2393);
   }
-  /* ./parser//parser.nit:2422 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2395 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2395);
   }
-  /* ./parser//parser.nit:2424 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2397 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2397);
   }
-  /* ./parser//parser.nit:2425 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
-  fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:2427 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2398 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[5]);
+  fra.me.REG[10] = fra.me.REG[5];
+  /* parser/parser.nit:2400 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2427);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2400);
   }
-  /* ./parser//parser.nit:2428 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
-  fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2429 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2439 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2440 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction45____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2401 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
+  fra.me.REG[11] = fra.me.REG[4];
+  /* parser/parser.nit:2403 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2403);
+  }
+  /* parser/parser.nit:2404 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2415 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2416 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2440);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2416);
   }
-  REGB0 = ATTR_parser___ReduceAction45____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction45___init(val_t p0, val_t p1, int* init_table){
-  int itpos48 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction45].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos48]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2443;
-  fra.me.meth = LOCATE_parser___ReduceAction45___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2443 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction45____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos48] = 1;
-  return;
-}
 void parser___ReduceAction46___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2447;
+  fra.me.line = 2421;
   fra.me.meth = LOCATE_parser___ReduceAction46___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -9886,134 +9240,118 @@ void parser___ReduceAction46___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2449 */
+  /* parser/parser.nit:2423 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2450 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2451 */
+  /* parser/parser.nit:2424 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2452 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2453 */
+  /* parser/parser.nit:2425 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2426 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2454 */
+  /* parser/parser.nit:2427 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2455 */
+  /* parser/parser.nit:2428 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2456 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2457 */
+  /* parser/parser.nit:2429 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2430 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2458 */
+  /* parser/parser.nit:2431 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2459 */
+  /* parser/parser.nit:2432 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2460 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2461 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2462 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2464 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2433 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2434 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2435 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2436 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2438 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2464);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2438);
   }
-  /* ./parser//parser.nit:2466 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2440 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2440);
   }
-  /* ./parser//parser.nit:2468 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2442 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2442);
   }
-  /* ./parser//parser.nit:2470 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2444 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2470);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2444);
   }
-  /* ./parser//parser.nit:2472 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2446 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2472);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2446);
   }
-  /* ./parser//parser.nit:2474 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2448 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2474);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2448);
   }
-  /* ./parser//parser.nit:2475 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
-  fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2477 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2449 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[5]);
+  fra.me.REG[11] = fra.me.REG[5];
+  /* parser/parser.nit:2451 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2451);
+  }
+  /* parser/parser.nit:2452 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
+  fra.me.REG[12] = fra.me.REG[4];
+  /* parser/parser.nit:2454 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2454);
   }
-  /* ./parser//parser.nit:2478 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
-  fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2479 */
-  fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2489 */
-  fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2490 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction46____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2455 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:2466 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2467 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2490);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2467);
   }
-  REGB0 = ATTR_parser___ReduceAction46____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction46___init(val_t p0, val_t p1, int* init_table){
-  int itpos49 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction46].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos49]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2493;
-  fra.me.meth = LOCATE_parser___ReduceAction46___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2493 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction46____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos49] = 1;
-  return;
-}
 void parser___ReduceAction47___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2497;
+  fra.me.line = 2472;
   fra.me.meth = LOCATE_parser___ReduceAction47___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 11;
+  fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10025,115 +9363,99 @@ void parser___ReduceAction47___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
+  fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2499 */
+  /* parser/parser.nit:2474 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2500 */
+  /* parser/parser.nit:2475 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2501 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2502 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2503 */
+  /* parser/parser.nit:2476 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2504 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2505 */
+  /* parser/parser.nit:2477 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2478 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2506 */
+  /* parser/parser.nit:2479 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2507 */
+  /* parser/parser.nit:2480 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2481 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2508 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2509 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2510 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2512 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2482 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2483 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2484 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2485 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2487 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2487);
+  }
+  /* parser/parser.nit:2489 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2489);
   }
-  /* ./parser//parser.nit:2514 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2491 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2491);
   }
-  /* ./parser//parser.nit:2516 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2493 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2493);
   }
-  /* ./parser//parser.nit:2518 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2495 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2518);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2495);
   }
-  /* ./parser//parser.nit:2520 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2496 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
+  fra.me.REG[11] = fra.me.REG[4];
+  /* parser/parser.nit:2498 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2520);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2498);
   }
-  /* ./parser//parser.nit:2521 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[3]);
-  fra.me.REG[10] = fra.me.REG[3];
-  /* ./parser//parser.nit:2522 */
-  fra.me.REG[10] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8], fra.me.REG[9], fra.me.REG[10]);
-  /* ./parser//parser.nit:2532 */
-  fra.me.REG[2] = fra.me.REG[10];
-  /* ./parser//parser.nit:2533 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction47____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2499 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11], fra.me.REG[3]);
+  /* parser/parser.nit:2510 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2511 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2533);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2511);
   }
-  REGB0 = ATTR_parser___ReduceAction47____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction47___init(val_t p0, val_t p1, int* init_table){
-  int itpos50 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction47].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos50]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2536;
-  fra.me.meth = LOCATE_parser___ReduceAction47___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2536 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction47____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos50] = 1;
-  return;
-}
 void parser___ReduceAction48___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2540;
+  fra.me.line = 2516;
   fra.me.meth = LOCATE_parser___ReduceAction48___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10146,123 +9468,107 @@ void parser___ReduceAction48___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2542 */
+  /* parser/parser.nit:2518 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2543 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2544 */
+  /* parser/parser.nit:2519 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2545 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2546 */
+  /* parser/parser.nit:2520 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2547 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2548 */
+  /* parser/parser.nit:2521 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2522 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2549 */
+  /* parser/parser.nit:2523 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2524 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2550 */
+  /* parser/parser.nit:2525 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2551 */
+  /* parser/parser.nit:2526 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2552 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2553 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2554 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2556 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2527 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2528 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2529 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2530 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2532 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2532);
+  }
+  /* parser/parser.nit:2534 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2534);
   }
-  /* ./parser//parser.nit:2558 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2536 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2536);
   }
-  /* ./parser//parser.nit:2560 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2538 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2538);
   }
-  /* ./parser//parser.nit:2562 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2540 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2540);
   }
-  /* ./parser//parser.nit:2564 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2542 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2542);
   }
-  /* ./parser//parser.nit:2566 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2543 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
+  fra.me.REG[12] = fra.me.REG[4];
+  /* parser/parser.nit:2545 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2545);
   }
-  /* ./parser//parser.nit:2567 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
-  fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2568 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2578 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2579 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction48____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2546 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2557 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2558 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2579);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2558);
   }
-  REGB0 = ATTR_parser___ReduceAction48____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction48___init(val_t p0, val_t p1, int* init_table){
-  int itpos51 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction48].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos51]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2582;
-  fra.me.meth = LOCATE_parser___ReduceAction48___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2582 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction48____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos51] = 1;
-  return;
-}
 void parser___ReduceAction49___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2586;
+  fra.me.line = 2563;
   fra.me.meth = LOCATE_parser___ReduceAction49___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10275,126 +9581,110 @@ void parser___ReduceAction49___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2588 */
+  /* parser/parser.nit:2565 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2589 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2590 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2591 */
+  /* parser/parser.nit:2566 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2592 */
+  /* parser/parser.nit:2567 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2593 */
+  /* parser/parser.nit:2568 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2569 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2594 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2595 */
+  /* parser/parser.nit:2570 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2596 */
+  /* parser/parser.nit:2571 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2597 */
+  /* parser/parser.nit:2572 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2573 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2598 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2599 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2600 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2602 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2574 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2575 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2576 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2577 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2579 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2579);
   }
-  /* ./parser//parser.nit:2604 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2581 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2604);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2581);
   }
-  /* ./parser//parser.nit:2606 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2583 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2606);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2583);
   }
-  /* ./parser//parser.nit:2608 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2585 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2608);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2585);
   }
-  /* ./parser//parser.nit:2610 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2587 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2610);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2587);
   }
-  /* ./parser//parser.nit:2611 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[4]);
-  fra.me.REG[9] = fra.me.REG[4];
-  /* ./parser//parser.nit:2613 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2588 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[5]);
+  fra.me.REG[10] = fra.me.REG[5];
+  /* parser/parser.nit:2590 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2590);
+  }
+  /* parser/parser.nit:2591 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
+  fra.me.REG[12] = fra.me.REG[4];
+  /* parser/parser.nit:2593 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2593);
   }
-  /* ./parser//parser.nit:2614 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
-  fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2615 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2625 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2626 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction49____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2594 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2605 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2606 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2626);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2606);
   }
-  REGB0 = ATTR_parser___ReduceAction49____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction49___init(val_t p0, val_t p1, int* init_table){
-  int itpos52 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction49].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos52]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2629;
-  fra.me.meth = LOCATE_parser___ReduceAction49___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2629 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction49____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos52] = 1;
-  return;
-}
 void parser___ReduceAction50___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2633;
+  fra.me.line = 2611;
   fra.me.meth = LOCATE_parser___ReduceAction50___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10408,134 +9698,118 @@ void parser___ReduceAction50___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2635 */
+  /* parser/parser.nit:2613 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2636 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2637 */
+  /* parser/parser.nit:2614 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2638 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2639 */
+  /* parser/parser.nit:2615 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2616 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2640 */
+  /* parser/parser.nit:2617 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2641 */
+  /* parser/parser.nit:2618 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2642 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2643 */
+  /* parser/parser.nit:2619 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2620 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2644 */
+  /* parser/parser.nit:2621 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2645 */
+  /* parser/parser.nit:2622 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2646 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2647 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2648 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2650 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2623 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2624 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2625 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2626 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2628 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2650);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2628);
   }
-  /* ./parser//parser.nit:2652 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2630 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2630);
   }
-  /* ./parser//parser.nit:2654 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2632 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2654);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2632);
   }
-  /* ./parser//parser.nit:2656 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2634 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2634);
   }
-  /* ./parser//parser.nit:2658 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2636 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2636);
   }
-  /* ./parser//parser.nit:2660 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2638 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2660);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2638);
   }
-  /* ./parser//parser.nit:2661 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
-  fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2663 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2639 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[5]);
+  fra.me.REG[11] = fra.me.REG[5];
+  /* parser/parser.nit:2641 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2641);
+  }
+  /* parser/parser.nit:2642 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:2644 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2644);
   }
-  /* ./parser//parser.nit:2664 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
-  fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2665 */
-  fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2675 */
-  fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2676 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction50____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2645 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:2656 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2657 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2676);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2657);
   }
-  REGB0 = ATTR_parser___ReduceAction50____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction50___init(val_t p0, val_t p1, int* init_table){
-  int itpos53 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction50].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos53]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2679;
-  fra.me.meth = LOCATE_parser___ReduceAction50___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2679 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction50____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos53] = 1;
-  return;
-}
 void parser___ReduceAction51___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2683;
+  fra.me.line = 2662;
   fra.me.meth = LOCATE_parser___ReduceAction51___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 12;
+  fra.me.REG_size = 13;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10548,126 +9822,110 @@ void parser___ReduceAction51___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
+  fra.me.REG[12] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2685 */
+  /* parser/parser.nit:2664 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2686 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2687 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2688 */
+  /* parser/parser.nit:2665 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2689 */
+  /* parser/parser.nit:2666 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2690 */
+  /* parser/parser.nit:2667 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2668 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2691 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2692 */
+  /* parser/parser.nit:2669 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2693 */
+  /* parser/parser.nit:2670 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2694 */
+  /* parser/parser.nit:2671 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2672 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2695 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2696 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2697 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2699 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2673 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2674 */
+  fra.me.REG[10] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2675 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2676 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2678 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2678);
   }
-  /* ./parser//parser.nit:2701 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2680 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2680);
   }
-  /* ./parser//parser.nit:2703 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2682 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2682);
   }
-  /* ./parser//parser.nit:2705 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2684 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2684);
   }
-  /* ./parser//parser.nit:2707 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2686 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2686);
   }
-  /* ./parser//parser.nit:2708 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[4]);
-  fra.me.REG[10] = fra.me.REG[4];
-  /* ./parser//parser.nit:2710 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2687 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[5]);
+  fra.me.REG[11] = fra.me.REG[5];
+  /* parser/parser.nit:2689 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2689);
   }
-  /* ./parser//parser.nit:2711 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[3]);
-  fra.me.REG[11] = fra.me.REG[3];
-  /* ./parser//parser.nit:2712 */
-  fra.me.REG[11] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[9], fra.me.REG[10], fra.me.REG[11]);
-  /* ./parser//parser.nit:2722 */
-  fra.me.REG[2] = fra.me.REG[11];
-  /* ./parser//parser.nit:2723 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction51____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2690 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
+  fra.me.REG[12] = fra.me.REG[4];
+  /* parser/parser.nit:2692 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2692);
+  }
+  /* parser/parser.nit:2693 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12], fra.me.REG[3]);
+  /* parser/parser.nit:2704 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2705 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2723);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2705);
   }
-  REGB0 = ATTR_parser___ReduceAction51____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction51___init(val_t p0, val_t p1, int* init_table){
-  int itpos54 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction51].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos54]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2726;
-  fra.me.meth = LOCATE_parser___ReduceAction51___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2726 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction51____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos54] = 1;
-  return;
-}
 void parser___ReduceAction52___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2730;
+  fra.me.line = 2710;
   fra.me.meth = LOCATE_parser___ReduceAction52___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10681,134 +9939,118 @@ void parser___ReduceAction52___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2732 */
+  /* parser/parser.nit:2712 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2733 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2734 */
+  /* parser/parser.nit:2713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2735 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2736 */
+  /* parser/parser.nit:2714 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2715 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2737 */
+  /* parser/parser.nit:2716 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2738 */
+  /* parser/parser.nit:2717 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2739 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2740 */
+  /* parser/parser.nit:2718 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2719 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2741 */
+  /* parser/parser.nit:2720 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2742 */
+  /* parser/parser.nit:2721 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2743 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2744 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2745 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2747 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2722 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2723 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2724 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2725 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2727 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2727);
   }
-  /* ./parser//parser.nit:2749 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2729 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2729);
   }
-  /* ./parser//parser.nit:2751 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2731 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2731);
   }
-  /* ./parser//parser.nit:2753 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2733 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2733);
   }
-  /* ./parser//parser.nit:2755 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2735 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2735);
   }
-  /* ./parser//parser.nit:2757 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2737 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2757);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2737);
   }
-  /* ./parser//parser.nit:2758 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
-  fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:2760 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2738 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:2740 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2740);
+  }
+  /* parser/parser.nit:2741 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:2743 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2760);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2743);
   }
-  /* ./parser//parser.nit:2761 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
-  fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2762 */
-  fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2772 */
-  fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2773 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction52____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2744 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:2755 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2756 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2773);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2756);
   }
-  REGB0 = ATTR_parser___ReduceAction52____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction52___init(val_t p0, val_t p1, int* init_table){
-  int itpos55 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction52].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction53___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos55]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2776;
-  fra.me.meth = LOCATE_parser___ReduceAction52___init;
+  fra.me.line = 2761;
+  fra.me.meth = LOCATE_parser___ReduceAction53___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2776 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction52____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos55] = 1;
-  return;
-}
-void parser___ReduceAction53___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[12];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2780;
-  fra.me.meth = LOCATE_parser___ReduceAction53___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 13;
+  fra.me.REG_size = 14;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10822,137 +10064,121 @@ void parser___ReduceAction53___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[12] = NIT_NULL;
+  fra.me.REG[13] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2782 */
+  /* parser/parser.nit:2763 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2783 */
+  /* parser/parser.nit:2764 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2784 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2785 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2786 */
+  /* parser/parser.nit:2765 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2787 */
+  /* parser/parser.nit:2766 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2767 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2788 */
+  /* parser/parser.nit:2768 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2789 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2790 */
+  /* parser/parser.nit:2769 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2791 */
+  /* parser/parser.nit:2770 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2792 */
+  /* parser/parser.nit:2771 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2772 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2793 */
-  fra.me.REG[10] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2794 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2795 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2797 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2773 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2774 */
+  fra.me.REG[11] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2775 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2776 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2778 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2797);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2778);
   }
-  /* ./parser//parser.nit:2799 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2780 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2799);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2780);
   }
-  /* ./parser//parser.nit:2801 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2782 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2801);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2782);
   }
-  /* ./parser//parser.nit:2803 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2784 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2784);
   }
-  /* ./parser//parser.nit:2805 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2786 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2786);
   }
-  /* ./parser//parser.nit:2806 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[10], fra.me.REG[5]);
-  fra.me.REG[10] = fra.me.REG[5];
-  /* ./parser//parser.nit:2808 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2787 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[6]);
+  fra.me.REG[11] = fra.me.REG[6];
+  /* parser/parser.nit:2789 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2808);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2789);
   }
-  /* ./parser//parser.nit:2809 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[4]);
-  fra.me.REG[11] = fra.me.REG[4];
-  /* ./parser//parser.nit:2811 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2790 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[5]);
+  fra.me.REG[12] = fra.me.REG[5];
+  /* parser/parser.nit:2792 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2792);
+  }
+  /* parser/parser.nit:2793 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[4]);
+  fra.me.REG[13] = fra.me.REG[4];
+  /* parser/parser.nit:2795 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2795);
   }
-  /* ./parser//parser.nit:2812 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[3]);
-  fra.me.REG[12] = fra.me.REG[3];
-  /* ./parser//parser.nit:2813 */
-  fra.me.REG[12] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[10], fra.me.REG[11], fra.me.REG[12]);
-  /* ./parser//parser.nit:2823 */
-  fra.me.REG[2] = fra.me.REG[12];
-  /* ./parser//parser.nit:2824 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction53____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2796 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13], fra.me.REG[3]);
+  /* parser/parser.nit:2807 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2808 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2808);
   }
-  REGB0 = ATTR_parser___ReduceAction53____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction53___init(val_t p0, val_t p1, int* init_table){
-  int itpos56 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction53].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos56]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2827;
-  fra.me.meth = LOCATE_parser___ReduceAction53___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2827 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction53____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos56] = 1;
-  return;
-}
 void parser___ReduceAction54___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[13];} fra;
+  struct {struct stack_frame_t me; val_t MORE_REG[14];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2831;
+  fra.me.line = 2813;
   fra.me.meth = LOCATE_parser___ReduceAction54___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 14;
+  fra.me.REG_size = 15;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -10967,211 +10193,172 @@ void parser___ReduceAction54___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[12] = NIT_NULL;
   fra.me.REG[13] = NIT_NULL;
+  fra.me.REG[14] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2833 */
+  /* parser/parser.nit:2815 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2834 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2835 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2836 */
+  /* parser/parser.nit:2816 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2837 */
+  /* parser/parser.nit:2817 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2838 */
+  /* parser/parser.nit:2818 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2819 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2839 */
+  /* parser/parser.nit:2820 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2840 */
-  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2841 */
+  /* parser/parser.nit:2821 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2842 */
+  /* parser/parser.nit:2822 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2843 */
+  /* parser/parser.nit:2823 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2824 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2844 */
+  /* parser/parser.nit:2825 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2845 */
-  fra.me.REG[11] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2846 */
-  fra.me.REG[12] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2847 */
-  fra.me.REG[13] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2849 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:2826 */
+  fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2827 */
+  fra.me.REG[12] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2828 */
+  fra.me.REG[13] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2829 */
+  fra.me.REG[14] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2831 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2849);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2831);
   }
-  /* ./parser//parser.nit:2851 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:2833 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2851);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2833);
   }
-  /* ./parser//parser.nit:2853 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:2835 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2853);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2835);
   }
-  /* ./parser//parser.nit:2855 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClasskind, ID_AClasskind)) /*cast nullable AClasskind*/;
+  /* parser/parser.nit:2837 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AClasskind, ID_parser___parser_nodes___AClasskind)) /*cast nullable AClasskind*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2837);
   }
-  /* ./parser//parser.nit:2857 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:2839 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2839);
   }
-  /* ./parser//parser.nit:2859 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2841 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2859);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2841);
   }
-  /* ./parser//parser.nit:2860 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[11], fra.me.REG[5]);
-  fra.me.REG[11] = fra.me.REG[5];
-  /* ./parser//parser.nit:2862 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2842 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[6]);
+  fra.me.REG[12] = fra.me.REG[6];
+  /* parser/parser.nit:2844 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2844);
   }
-  /* ./parser//parser.nit:2863 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[12], fra.me.REG[4]);
-  fra.me.REG[12] = fra.me.REG[4];
-  /* ./parser//parser.nit:2865 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2845 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[5]);
+  fra.me.REG[13] = fra.me.REG[5];
+  /* parser/parser.nit:2847 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2865);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2847);
   }
-  /* ./parser//parser.nit:2866 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[13], fra.me.REG[3]);
-  fra.me.REG[13] = fra.me.REG[3];
-  /* ./parser//parser.nit:2867 */
-  fra.me.REG[13] = NEW_AStdClassdef_parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[11], fra.me.REG[12], fra.me.REG[13]);
-  /* ./parser//parser.nit:2877 */
-  fra.me.REG[2] = fra.me.REG[13];
-  /* ./parser//parser.nit:2878 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction54____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2848 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[14], fra.me.REG[4]);
+  fra.me.REG[14] = fra.me.REG[4];
+  /* parser/parser.nit:2850 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2878);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2850);
+  }
+  /* parser/parser.nit:2851 */
+  fra.me.REG[3] = NEW_AStdClassdef_parser___parser_prod___AStdClassdef___init_astdclassdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[12], fra.me.REG[13], fra.me.REG[14], fra.me.REG[3]);
+  /* parser/parser.nit:2862 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2863 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2863);
   }
-  REGB0 = ATTR_parser___ReduceAction54____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction54___init(val_t p0, val_t p1, int* init_table){
-  int itpos57 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction54].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos57]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2881;
-  fra.me.meth = LOCATE_parser___ReduceAction54___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2881 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction54____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos57] = 1;
-  return;
-}
 void parser___ReduceAction55___action(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;
-  fra.me.line = 2885;
+  fra.me.line = 2868;
   fra.me.meth = LOCATE_parser___ReduceAction55___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2887 */
+  /* parser/parser.nit:2870 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2888 */
+  /* parser/parser.nit:2871 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2890 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
+  /* parser/parser.nit:2873 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2873);
   }
-  /* ./parser//parser.nit:2891 */
-  fra.me.REG[3] = NEW_AConcreteClasskind_parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2894 */
+  /* parser/parser.nit:2874 */
+  fra.me.REG[3] = NEW_AConcreteClasskind_parser___parser_prod___AConcreteClasskind___init_aconcreteclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:2877 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2895 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction55____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2878 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2895);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2878);
   }
-  REGB0 = ATTR_parser___ReduceAction55____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction55___init(val_t p0, val_t p1, int* init_table){
-  int itpos58 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction55].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos58]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2898;
-  fra.me.meth = LOCATE_parser___ReduceAction55___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2898 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction55____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos58] = 1;
-  return;
-}
 void parser___ReduceAction56___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2902;
+  fra.me.line = 2883;
   fra.me.meth = LOCATE_parser___ReduceAction56___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11179,207 +10366,181 @@ void parser___ReduceAction56___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2904 */
+  /* parser/parser.nit:2885 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2905 */
+  /* parser/parser.nit:2886 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2906 */
+  /* parser/parser.nit:2887 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2908 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwabstract, ID_TKwabstract)) /*cast nullable TKwabstract*/;
+  /* parser/parser.nit:2889 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwabstract, ID_parser___parser_nodes___TKwabstract)) /*cast nullable TKwabstract*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2889);
   }
-  /* ./parser//parser.nit:2910 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwclass, ID_TKwclass)) /*cast nullable TKwclass*/;
+  /* parser/parser.nit:2891 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwclass, ID_parser___parser_nodes___TKwclass)) /*cast nullable TKwclass*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2910);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2891);
   }
-  /* ./parser//parser.nit:2911 */
-  fra.me.REG[3] = NEW_AAbstractClasskind_parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:2915 */
+  /* parser/parser.nit:2892 */
+  fra.me.REG[3] = NEW_AAbstractClasskind_parser___parser_prod___AAbstractClasskind___init_aabstractclasskind(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:2896 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2916 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction56____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2897 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2916);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2897);
   }
-  REGB0 = ATTR_parser___ReduceAction56____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction56___init(val_t p0, val_t p1, int* init_table){
-  int itpos59 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction56].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos59]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2919;
-  fra.me.meth = LOCATE_parser___ReduceAction56___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2919 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction56____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos59] = 1;
-  return;
-}
 void parser___ReduceAction57___action(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;
-  fra.me.line = 2923;
+  fra.me.line = 2902;
   fra.me.meth = LOCATE_parser___ReduceAction57___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2925 */
+  /* parser/parser.nit:2904 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2926 */
+  /* parser/parser.nit:2905 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2928 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwinterface, ID_TKwinterface)) /*cast nullable TKwinterface*/;
+  /* parser/parser.nit:2907 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwinterface, ID_parser___parser_nodes___TKwinterface)) /*cast nullable TKwinterface*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2928);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2907);
   }
-  /* ./parser//parser.nit:2929 */
-  fra.me.REG[3] = NEW_AInterfaceClasskind_parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2932 */
+  /* parser/parser.nit:2908 */
+  fra.me.REG[3] = NEW_AInterfaceClasskind_parser___parser_prod___AInterfaceClasskind___init_ainterfaceclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:2911 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2933 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction57____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2912 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2933);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2912);
   }
-  REGB0 = ATTR_parser___ReduceAction57____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction57___init(val_t p0, val_t p1, int* init_table){
-  int itpos60 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction57].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos60]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2936;
-  fra.me.meth = LOCATE_parser___ReduceAction57___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2936 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction57____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos60] = 1;
-  return;
-}
 void parser___ReduceAction58___action(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;
-  fra.me.line = 2940;
+  fra.me.line = 2917;
   fra.me.meth = LOCATE_parser___ReduceAction58___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2942 */
+  /* parser/parser.nit:2919 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2943 */
+  /* parser/parser.nit:2920 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2945 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwenum, ID_TKwenum)) /*cast nullable TKwenum*/;
+  /* parser/parser.nit:2922 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwenum, ID_parser___parser_nodes___TKwenum)) /*cast nullable TKwenum*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2945);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2922);
   }
-  /* ./parser//parser.nit:2946 */
-  fra.me.REG[3] = NEW_AEnumClasskind_parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
-  /* ./parser//parser.nit:2949 */
+  /* parser/parser.nit:2923 */
+  fra.me.REG[3] = NEW_AEnumClasskind_parser___parser_prod___AEnumClasskind___init_aenumclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:2926 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:2950 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction58____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2927 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2927);
   }
-  REGB0 = ATTR_parser___ReduceAction58____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction58___init(val_t p0, val_t p1, int* init_table){
-  int itpos61 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction58].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction59___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos61]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2953;
-  fra.me.meth = LOCATE_parser___ReduceAction58___init;
+  fra.me.line = 2932;
+  fra.me.meth = LOCATE_parser___ReduceAction59___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2953 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction58____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:2934 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:2935 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:2937 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwextern, ID_parser___parser_nodes___TKwextern)) /*cast nullable TKwextern*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2937);
+  }
+  /* parser/parser.nit:2938 */
+  fra.me.REG[3] = NEW_AExternClasskind_parser___parser_prod___AExternClasskind___init_aexternclasskind(fra.me.REG[3]);
+  /* parser/parser.nit:2941 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:2942 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2942);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos61] = 1;
   return;
 }
-void parser___ReduceAction59___action(val_t p0, val_t p1){
+void parser___ReduceAction60___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2957;
-  fra.me.meth = LOCATE_parser___ReduceAction59___action;
+  fra.me.line = 2947;
+  fra.me.meth = LOCATE_parser___ReduceAction60___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11387,21 +10548,21 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2959 */
+  /* parser/parser.nit:2949 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2960 */
+  /* parser/parser.nit:2950 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2961 */
+  /* parser/parser.nit:2951 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2962 */
+  /* parser/parser.nit:2952 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2963 */
+  /* parser/parser.nit:2953 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2964 */
+  /* parser/parser.nit:2954 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2965 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2967 */
+  /* parser/parser.nit:2955 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2957 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11410,64 +10571,41 @@ void parser___ReduceAction59___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2968 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:2958 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:2970 */
+  /* parser/parser.nit:2960 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:2971 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction59____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2961 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2971);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2961);
   }
-  REGB0 = ATTR_parser___ReduceAction59____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction59___init(val_t p0, val_t p1, int* init_table){
-  int itpos62 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction59].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos62]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2974;
-  fra.me.meth = LOCATE_parser___ReduceAction59___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2974 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction59____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos62] = 1;
-  return;
-}
-void parser___ReduceAction60___action(val_t p0, val_t p1){
+void parser___ReduceAction61___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 2978;
-  fra.me.meth = LOCATE_parser___ReduceAction60___action;
+  fra.me.line = 2966;
+  fra.me.meth = LOCATE_parser___ReduceAction61___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11476,29 +10614,29 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:2980 */
+  /* parser/parser.nit:2968 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:2981 */
+  /* parser/parser.nit:2969 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2982 */
+  /* parser/parser.nit:2970 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2983 */
+  /* parser/parser.nit:2971 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2984 */
+  /* parser/parser.nit:2972 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2985 */
+  /* parser/parser.nit:2973 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2986 */
+  /* parser/parser.nit:2974 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:2987 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:2990 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:2975 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:2978 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 2990);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 2978);
   }
-  /* ./parser//parser.nit:2991 */
+  /* parser/parser.nit:2979 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -11507,66 +10645,43 @@ void parser___ReduceAction60___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:2992 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:2980 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:2994 */
+  /* parser/parser.nit:2982 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:2995 */
+  /* parser/parser.nit:2983 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:2996 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction60____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2984 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2996);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2984);
   }
-  REGB0 = ATTR_parser___ReduceAction60____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction60___init(val_t p0, val_t p1, int* init_table){
-  int itpos63 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction60].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos63]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 2999;
-  fra.me.meth = LOCATE_parser___ReduceAction60___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:2999 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction60____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos63] = 1;
-  return;
-}
-void parser___ReduceAction61___action(val_t p0, val_t p1){
+void parser___ReduceAction62___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3003;
-  fra.me.meth = LOCATE_parser___ReduceAction61___action;
+  fra.me.line = 2989;
+  fra.me.meth = LOCATE_parser___ReduceAction62___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11574,128 +10689,82 @@ void parser___ReduceAction61___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3005 */
+  /* parser/parser.nit:2991 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3006 */
+  /* parser/parser.nit:2992 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3007 */
+  /* parser/parser.nit:2993 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3008 */
+  /* parser/parser.nit:2994 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3010 */
+  /* parser/parser.nit:2996 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3011 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction61____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:2997 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3011);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 2997);
   }
-  REGB0 = ATTR_parser___ReduceAction61____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction61___init(val_t p0, val_t p1, int* init_table){
-  int itpos64 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction61].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos64]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3014;
-  fra.me.meth = LOCATE_parser___ReduceAction61___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3014 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction61____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos64] = 1;
-  return;
-}
-void parser___ReduceAction62___action(val_t p0, val_t p1){
+void parser___ReduceAction63___action(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;
-  fra.me.line = 3018;
-  fra.me.meth = LOCATE_parser___ReduceAction62___action;
+  fra.me.line = 3002;
+  fra.me.meth = LOCATE_parser___ReduceAction63___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3020 */
+  /* parser/parser.nit:3004 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3021 */
+  /* parser/parser.nit:3005 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3023 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:3007 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3007);
   }
-  /* ./parser//parser.nit:3024 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3028 */
+  /* parser/parser.nit:3008 */
+  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:3012 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3029 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction62____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3013 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3029);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3013);
   }
-  REGB0 = ATTR_parser___ReduceAction62____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction62___init(val_t p0, val_t p1, int* init_table){
-  int itpos65 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction62].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos65]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3032;
-  fra.me.meth = LOCATE_parser___ReduceAction62___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3032 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction62____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos65] = 1;
-  return;
-}
-void parser___ReduceAction63___action(val_t p0, val_t p1){
+void parser___ReduceAction64___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3036;
-  fra.me.meth = LOCATE_parser___ReduceAction63___action;
+  fra.me.line = 3018;
+  fra.me.meth = LOCATE_parser___ReduceAction64___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11703,74 +10772,51 @@ void parser___ReduceAction63___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3038 */
+  /* parser/parser.nit:3020 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3039 */
+  /* parser/parser.nit:3021 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3040 */
+  /* parser/parser.nit:3022 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3042 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:3024 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3042);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3024);
   }
-  /* ./parser//parser.nit:3044 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:3026 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3044);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3026);
   }
-  /* ./parser//parser.nit:3045 */
-  fra.me.REG[3] = NEW_AFormaldef_parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3049 */
+  /* parser/parser.nit:3027 */
+  fra.me.REG[3] = NEW_AFormaldef_parser___parser_prod___AFormaldef___init_aformaldef(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3031 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3050 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction63____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3032 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3050);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3032);
   }
-  REGB0 = ATTR_parser___ReduceAction63____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction63___init(val_t p0, val_t p1, int* init_table){
-  int itpos66 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction63].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;
-  fra.me.line = 3053;
-  fra.me.meth = LOCATE_parser___ReduceAction63___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3053 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction63____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos66] = 1;
-  return;
-}
-void parser___ReduceAction64___action(val_t p0, val_t p1){
+void parser___ReduceAction65___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3057;
-  fra.me.meth = LOCATE_parser___ReduceAction64___action;
+  fra.me.line = 3037;
+  fra.me.meth = LOCATE_parser___ReduceAction65___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11779,78 +10825,55 @@ void parser___ReduceAction64___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3059 */
+  /* parser/parser.nit:3039 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3060 */
+  /* parser/parser.nit:3040 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3061 */
+  /* parser/parser.nit:3041 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3062 */
+  /* parser/parser.nit:3042 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3063 */
+  /* parser/parser.nit:3043 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3065 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwspecial, ID_TKwspecial)) /*cast nullable TKwspecial*/;
+  /* parser/parser.nit:3045 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwspecial, ID_parser___parser_nodes___TKwspecial)) /*cast nullable TKwspecial*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3045);
   }
-  /* ./parser//parser.nit:3067 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:3047 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3047);
   }
-  /* ./parser//parser.nit:3068 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3073 */
+  /* parser/parser.nit:3048 */
+  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:3053 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3074 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction64____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3054 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3074);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3054);
   }
-  REGB0 = ATTR_parser___ReduceAction64____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction64___init(val_t p0, val_t p1, int* init_table){
-  int itpos67 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction64].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos67]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3077;
-  fra.me.meth = LOCATE_parser___ReduceAction64___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3077 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction64____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos67] = 1;
-  return;
-}
-void parser___ReduceAction65___action(val_t p0, val_t p1){
+void parser___ReduceAction66___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3081;
-  fra.me.meth = LOCATE_parser___ReduceAction65___action;
+  fra.me.line = 3059;
+  fra.me.meth = LOCATE_parser___ReduceAction66___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -11859,138 +10882,92 @@ void parser___ReduceAction65___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3083 */
+  /* parser/parser.nit:3061 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3084 */
+  /* parser/parser.nit:3062 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3085 */
+  /* parser/parser.nit:3063 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3086 */
+  /* parser/parser.nit:3064 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3087 */
+  /* parser/parser.nit:3065 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3089 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:3067 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3089);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3067);
   }
-  /* ./parser//parser.nit:3091 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:3069 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3091);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3069);
   }
-  /* ./parser//parser.nit:3092 */
-  fra.me.REG[3] = NEW_ASuperclass_parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3097 */
+  /* parser/parser.nit:3070 */
+  fra.me.REG[3] = NEW_ASuperclass_parser___parser_prod___ASuperclass___init_asuperclass(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3075 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3098 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction65____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3076 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3098);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3076);
   }
-  REGB0 = ATTR_parser___ReduceAction65____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction65___init(val_t p0, val_t p1, int* init_table){
-  int itpos68 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction65].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos68]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3101;
-  fra.me.meth = LOCATE_parser___ReduceAction65___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3101 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction65____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos68] = 1;
-  return;
-}
-void parser___ReduceAction66___action(val_t p0, val_t p1){
+void parser___ReduceAction67___action(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;
-  fra.me.line = 3105;
-  fra.me.meth = LOCATE_parser___ReduceAction66___action;
+  fra.me.line = 3081;
+  fra.me.meth = LOCATE_parser___ReduceAction67___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3107 */
+  /* parser/parser.nit:3083 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3108 */
+  /* parser/parser.nit:3084 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3109 */
+  /* parser/parser.nit:3085 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3111 */
+  /* parser/parser.nit:3087 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3112 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction66____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3088 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3112);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3088);
   }
-  REGB0 = ATTR_parser___ReduceAction66____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction66___init(val_t p0, val_t p1, int* init_table){
-  int itpos69 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction66].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos69]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3115;
-  fra.me.meth = LOCATE_parser___ReduceAction66___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3115 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction66____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos69] = 1;
-  return;
-}
-void parser___ReduceAction67___action(val_t p0, val_t p1){
+void parser___ReduceAction68___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3119;
-  fra.me.meth = LOCATE_parser___ReduceAction67___action;
+  fra.me.line = 3093;
+  fra.me.meth = LOCATE_parser___ReduceAction68___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12002,108 +10979,85 @@ void parser___ReduceAction67___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3121 */
+  /* parser/parser.nit:3095 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3122 */
+  /* parser/parser.nit:3096 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3123 */
+  /* parser/parser.nit:3097 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3124 */
+  /* parser/parser.nit:3098 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3125 */
+  /* parser/parser.nit:3099 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3126 */
+  /* parser/parser.nit:3100 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3127 */
+  /* parser/parser.nit:3101 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3128 */
+  /* parser/parser.nit:3102 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3130 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3104 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3104);
   }
-  /* ./parser//parser.nit:3132 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3106 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3106);
   }
-  /* ./parser//parser.nit:3134 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3108 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3134);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3108);
   }
-  /* ./parser//parser.nit:3136 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3110 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3136);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3110);
   }
-  /* ./parser//parser.nit:3138 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3112 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3138);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3112);
   }
-  /* ./parser//parser.nit:3140 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3114 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3140);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3114);
   }
-  /* ./parser//parser.nit:3141 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3150 */
+  /* parser/parser.nit:3115 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3124 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3151 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction67____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3125 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3151);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3125);
   }
-  REGB0 = ATTR_parser___ReduceAction67____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction67___init(val_t p0, val_t p1, int* init_table){
-  int itpos70 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction67].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;
-  fra.me.line = 3154;
-  fra.me.meth = LOCATE_parser___ReduceAction67___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3154 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction67____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos70] = 1;
-  return;
-}
-void parser___ReduceAction68___action(val_t p0, val_t p1){
+void parser___ReduceAction69___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3158;
-  fra.me.meth = LOCATE_parser___ReduceAction68___action;
+  fra.me.line = 3130;
+  fra.me.meth = LOCATE_parser___ReduceAction69___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12116,116 +11070,93 @@ void parser___ReduceAction68___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3160 */
+  /* parser/parser.nit:3132 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3161 */
+  /* parser/parser.nit:3133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3162 */
+  /* parser/parser.nit:3134 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3163 */
+  /* parser/parser.nit:3135 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3164 */
+  /* parser/parser.nit:3136 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3165 */
+  /* parser/parser.nit:3137 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3166 */
+  /* parser/parser.nit:3138 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3167 */
+  /* parser/parser.nit:3139 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3168 */
+  /* parser/parser.nit:3140 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3170 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3142 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3170);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3142);
   }
-  /* ./parser//parser.nit:3172 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3144 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3172);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3144);
   }
-  /* ./parser//parser.nit:3174 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3146 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3174);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3146);
   }
-  /* ./parser//parser.nit:3176 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3148 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3148);
   }
-  /* ./parser//parser.nit:3178 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3150 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3178);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3150);
   }
-  /* ./parser//parser.nit:3180 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3152 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3180);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3152);
   }
-  /* ./parser//parser.nit:3182 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3154 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3154);
   }
-  /* ./parser//parser.nit:3183 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3192 */
+  /* parser/parser.nit:3155 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3164 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3193 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction68____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3165 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3193);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3165);
   }
-  REGB0 = ATTR_parser___ReduceAction68____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction68___init(val_t p0, val_t p1, int* init_table){
-  int itpos71 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction68].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos71]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3196;
-  fra.me.meth = LOCATE_parser___ReduceAction68___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3196 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction68____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos71] = 1;
-  return;
-}
-void parser___ReduceAction69___action(val_t p0, val_t p1){
+void parser___ReduceAction70___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3200;
-  fra.me.meth = LOCATE_parser___ReduceAction69___action;
+  fra.me.line = 3170;
+  fra.me.meth = LOCATE_parser___ReduceAction70___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12237,110 +11168,87 @@ void parser___ReduceAction69___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3202 */
+  /* parser/parser.nit:3172 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3203 */
+  /* parser/parser.nit:3173 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3204 */
+  /* parser/parser.nit:3174 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3205 */
+  /* parser/parser.nit:3175 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3206 */
+  /* parser/parser.nit:3176 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3207 */
+  /* parser/parser.nit:3177 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3208 */
+  /* parser/parser.nit:3178 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3209 */
+  /* parser/parser.nit:3179 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3210 */
+  /* parser/parser.nit:3180 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3212 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3182 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3212);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3182);
   }
-  /* ./parser//parser.nit:3214 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3184 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3214);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3184);
   }
-  /* ./parser//parser.nit:3216 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3186 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3186);
   }
-  /* ./parser//parser.nit:3218 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3188 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3188);
   }
-  /* ./parser//parser.nit:3220 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3190 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3220);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3190);
   }
-  /* ./parser//parser.nit:3222 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3192 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3192);
   }
-  /* ./parser//parser.nit:3223 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3232 */
+  /* parser/parser.nit:3193 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3202 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3233 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction69____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3203 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3233);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3203);
   }
-  REGB0 = ATTR_parser___ReduceAction69____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction69___init(val_t p0, val_t p1, int* init_table){
-  int itpos72 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction69].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos72]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3236;
-  fra.me.meth = LOCATE_parser___ReduceAction69___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3236 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction69____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos72] = 1;
-  return;
-}
-void parser___ReduceAction70___action(val_t p0, val_t p1){
+void parser___ReduceAction71___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3240;
-  fra.me.meth = LOCATE_parser___ReduceAction70___action;
+  fra.me.line = 3208;
+  fra.me.meth = LOCATE_parser___ReduceAction71___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12353,118 +11261,95 @@ void parser___ReduceAction70___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3242 */
+  /* parser/parser.nit:3210 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3243 */
+  /* parser/parser.nit:3211 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3244 */
+  /* parser/parser.nit:3212 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3245 */
+  /* parser/parser.nit:3213 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3246 */
+  /* parser/parser.nit:3214 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3247 */
+  /* parser/parser.nit:3215 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3248 */
+  /* parser/parser.nit:3216 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3249 */
+  /* parser/parser.nit:3217 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3250 */
+  /* parser/parser.nit:3218 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3251 */
+  /* parser/parser.nit:3219 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3253 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3221 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3221);
   }
-  /* ./parser//parser.nit:3255 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3223 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3255);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3223);
   }
-  /* ./parser//parser.nit:3257 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3225 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3257);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3225);
   }
-  /* ./parser//parser.nit:3259 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3227 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3227);
   }
-  /* ./parser//parser.nit:3261 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3229 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3229);
   }
-  /* ./parser//parser.nit:3263 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3231 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3231);
   }
-  /* ./parser//parser.nit:3265 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3233 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3233);
   }
-  /* ./parser//parser.nit:3266 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3275 */
+  /* parser/parser.nit:3234 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3243 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3276 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction70____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3244 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3276);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3244);
   }
-  REGB0 = ATTR_parser___ReduceAction70____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction70___init(val_t p0, val_t p1, int* init_table){
-  int itpos73 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction70].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos73]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3279;
-  fra.me.meth = LOCATE_parser___ReduceAction70___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3279 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction70____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos73] = 1;
-  return;
-}
-void parser___ReduceAction71___action(val_t p0, val_t p1){
+void parser___ReduceAction72___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3283;
-  fra.me.meth = LOCATE_parser___ReduceAction71___action;
+  fra.me.line = 3249;
+  fra.me.meth = LOCATE_parser___ReduceAction72___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12476,110 +11361,87 @@ void parser___ReduceAction71___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3285 */
+  /* parser/parser.nit:3251 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3286 */
+  /* parser/parser.nit:3252 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3287 */
+  /* parser/parser.nit:3253 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3288 */
+  /* parser/parser.nit:3254 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3289 */
+  /* parser/parser.nit:3255 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3290 */
+  /* parser/parser.nit:3256 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3291 */
+  /* parser/parser.nit:3257 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3292 */
+  /* parser/parser.nit:3258 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3293 */
+  /* parser/parser.nit:3259 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3295 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3261 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3295);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3261);
   }
-  /* ./parser//parser.nit:3297 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3263 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3297);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3263);
   }
-  /* ./parser//parser.nit:3299 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3265 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3299);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3265);
   }
-  /* ./parser//parser.nit:3301 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3267 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3267);
   }
-  /* ./parser//parser.nit:3303 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3269 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3269);
   }
-  /* ./parser//parser.nit:3305 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3271 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3271);
   }
-  /* ./parser//parser.nit:3306 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3315 */
+  /* parser/parser.nit:3272 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3281 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3316 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction71____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3282 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3316);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3282);
   }
-  REGB0 = ATTR_parser___ReduceAction71____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction71___init(val_t p0, val_t p1, int* init_table){
-  int itpos74 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction71].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos74]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3319;
-  fra.me.meth = LOCATE_parser___ReduceAction71___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3319 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction71____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos74] = 1;
-  return;
-}
-void parser___ReduceAction72___action(val_t p0, val_t p1){
+void parser___ReduceAction73___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3323;
-  fra.me.meth = LOCATE_parser___ReduceAction72___action;
+  fra.me.line = 3287;
+  fra.me.meth = LOCATE_parser___ReduceAction73___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12592,118 +11454,95 @@ void parser___ReduceAction72___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3325 */
+  /* parser/parser.nit:3289 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3326 */
+  /* parser/parser.nit:3290 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3327 */
+  /* parser/parser.nit:3291 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3328 */
+  /* parser/parser.nit:3292 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3329 */
+  /* parser/parser.nit:3293 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3330 */
+  /* parser/parser.nit:3294 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3331 */
+  /* parser/parser.nit:3295 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3332 */
+  /* parser/parser.nit:3296 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3333 */
+  /* parser/parser.nit:3297 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3334 */
+  /* parser/parser.nit:3298 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3336 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3300 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3336);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3300);
   }
-  /* ./parser//parser.nit:3338 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3302 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3302);
   }
-  /* ./parser//parser.nit:3340 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3304 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3340);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3304);
   }
-  /* ./parser//parser.nit:3342 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3306 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3342);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3306);
   }
-  /* ./parser//parser.nit:3344 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3308 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3344);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3308);
   }
-  /* ./parser//parser.nit:3346 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3310);
   }
-  /* ./parser//parser.nit:3348 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:3312 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3312);
   }
-  /* ./parser//parser.nit:3349 */
-  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3358 */
+  /* parser/parser.nit:3313 */
+  fra.me.REG[3] = NEW_AConcreteMethPropdef_parser___parser_prod___AConcreteMethPropdef___init_aconcretemethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3322 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3359 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction72____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3323 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3359);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3323);
   }
-  REGB0 = ATTR_parser___ReduceAction72____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction72___init(val_t p0, val_t p1, int* init_table){
-  int itpos75 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction72].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos75]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3362;
-  fra.me.meth = LOCATE_parser___ReduceAction72___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3362 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction72____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos75] = 1;
-  return;
-}
-void parser___ReduceAction73___action(val_t p0, val_t p1){
+void parser___ReduceAction74___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3366;
-  fra.me.meth = LOCATE_parser___ReduceAction73___action;
+  fra.me.line = 3328;
+  fra.me.meth = LOCATE_parser___ReduceAction74___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12714,102 +11553,79 @@ void parser___ReduceAction73___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3368 */
+  /* parser/parser.nit:3330 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3369 */
+  /* parser/parser.nit:3331 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3370 */
+  /* parser/parser.nit:3332 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3371 */
+  /* parser/parser.nit:3333 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3372 */
+  /* parser/parser.nit:3334 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3373 */
+  /* parser/parser.nit:3335 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3374 */
+  /* parser/parser.nit:3336 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3375 */
+  /* parser/parser.nit:3337 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3377 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3339 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3339);
   }
-  /* ./parser//parser.nit:3379 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3341 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3341);
   }
-  /* ./parser//parser.nit:3381 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3343 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3343);
   }
-  /* ./parser//parser.nit:3383 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3345 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3345);
   }
-  /* ./parser//parser.nit:3385 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3347 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3347);
   }
-  /* ./parser//parser.nit:3386 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3394 */
+  /* parser/parser.nit:3348 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3356 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3395 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction73____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3357 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3395);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3357);
   }
-  REGB0 = ATTR_parser___ReduceAction73____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction73___init(val_t p0, val_t p1, int* init_table){
-  int itpos76 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction73].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos76]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3398;
-  fra.me.meth = LOCATE_parser___ReduceAction73___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3398 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction73____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos76] = 1;
-  return;
-}
-void parser___ReduceAction74___action(val_t p0, val_t p1){
+void parser___ReduceAction75___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3402;
-  fra.me.meth = LOCATE_parser___ReduceAction74___action;
+  fra.me.line = 3362;
+  fra.me.meth = LOCATE_parser___ReduceAction75___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12821,110 +11637,87 @@ void parser___ReduceAction74___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3404 */
+  /* parser/parser.nit:3364 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3405 */
+  /* parser/parser.nit:3365 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3406 */
+  /* parser/parser.nit:3366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3407 */
+  /* parser/parser.nit:3367 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3408 */
+  /* parser/parser.nit:3368 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3409 */
+  /* parser/parser.nit:3369 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3410 */
+  /* parser/parser.nit:3370 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3411 */
+  /* parser/parser.nit:3371 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3412 */
+  /* parser/parser.nit:3372 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3414 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3374 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3414);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3374);
   }
-  /* ./parser//parser.nit:3416 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3376 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3416);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3376);
   }
-  /* ./parser//parser.nit:3418 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3378 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3378);
   }
-  /* ./parser//parser.nit:3420 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3380 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3380);
   }
-  /* ./parser//parser.nit:3422 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3382 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3382);
   }
-  /* ./parser//parser.nit:3424 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3384 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3424);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3384);
   }
-  /* ./parser//parser.nit:3425 */
-  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3433 */
+  /* parser/parser.nit:3385 */
+  fra.me.REG[3] = NEW_ADeferredMethPropdef_parser___parser_prod___ADeferredMethPropdef___init_adeferredmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3393 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3434 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction74____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3394 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3434);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3394);
   }
-  REGB0 = ATTR_parser___ReduceAction74____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction74___init(val_t p0, val_t p1, int* init_table){
-  int itpos77 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction74].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos77]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3437;
-  fra.me.meth = LOCATE_parser___ReduceAction74___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3437 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction74____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos77] = 1;
-  return;
-}
-void parser___ReduceAction75___action(val_t p0, val_t p1){
+void parser___ReduceAction76___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3441;
-  fra.me.meth = LOCATE_parser___ReduceAction75___action;
+  fra.me.line = 3399;
+  fra.me.meth = LOCATE_parser___ReduceAction76___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -12935,102 +11728,79 @@ void parser___ReduceAction75___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3443 */
+  /* parser/parser.nit:3401 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3444 */
+  /* parser/parser.nit:3402 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3445 */
+  /* parser/parser.nit:3403 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3446 */
+  /* parser/parser.nit:3404 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3447 */
+  /* parser/parser.nit:3405 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3448 */
+  /* parser/parser.nit:3406 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3449 */
+  /* parser/parser.nit:3407 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3450 */
+  /* parser/parser.nit:3408 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3452 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3410 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3452);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3410);
   }
-  /* ./parser//parser.nit:3454 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3412 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3454);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3412);
   }
-  /* ./parser//parser.nit:3456 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3414 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3414);
   }
-  /* ./parser//parser.nit:3458 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3416 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3416);
   }
-  /* ./parser//parser.nit:3460 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3418 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3418);
   }
-  /* ./parser//parser.nit:3461 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3469 */
+  /* parser/parser.nit:3419 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3427 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3470 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction75____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3428 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3470);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3428);
   }
-  REGB0 = ATTR_parser___ReduceAction75____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction75___init(val_t p0, val_t p1, int* init_table){
-  int itpos78 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction75].i;
-  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;
-  fra.me.line = 3473;
-  fra.me.meth = LOCATE_parser___ReduceAction75___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3473 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction75____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos78] = 1;
-  return;
-}
-void parser___ReduceAction76___action(val_t p0, val_t p1){
+void parser___ReduceAction77___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3477;
-  fra.me.meth = LOCATE_parser___ReduceAction76___action;
+  fra.me.line = 3433;
+  fra.me.meth = LOCATE_parser___ReduceAction77___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13042,110 +11812,87 @@ void parser___ReduceAction76___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3479 */
+  /* parser/parser.nit:3435 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3480 */
+  /* parser/parser.nit:3436 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3481 */
+  /* parser/parser.nit:3437 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3482 */
+  /* parser/parser.nit:3438 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3483 */
+  /* parser/parser.nit:3439 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3484 */
+  /* parser/parser.nit:3440 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3485 */
+  /* parser/parser.nit:3441 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3486 */
+  /* parser/parser.nit:3442 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3487 */
+  /* parser/parser.nit:3443 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3489 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3445 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3445);
   }
-  /* ./parser//parser.nit:3491 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3447 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3447);
   }
-  /* ./parser//parser.nit:3493 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3449 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3449);
   }
-  /* ./parser//parser.nit:3495 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3451 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3451);
   }
-  /* ./parser//parser.nit:3497 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3453 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3453);
   }
-  /* ./parser//parser.nit:3499 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3455 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3455);
   }
-  /* ./parser//parser.nit:3500 */
-  fra.me.REG[3] = NEW_AInternMethPropdef_parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3508 */
+  /* parser/parser.nit:3456 */
+  fra.me.REG[3] = NEW_AInternMethPropdef_parser___parser_prod___AInternMethPropdef___init_ainternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3464 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3509 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction76____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3465 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3509);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3465);
   }
-  REGB0 = ATTR_parser___ReduceAction76____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction76___init(val_t p0, val_t p1, int* init_table){
-  int itpos79 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction76].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos79]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3512;
-  fra.me.meth = LOCATE_parser___ReduceAction76___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3512 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction76____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos79] = 1;
-  return;
-}
-void parser___ReduceAction77___action(val_t p0, val_t p1){
+void parser___ReduceAction78___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3516;
-  fra.me.meth = LOCATE_parser___ReduceAction77___action;
+  fra.me.line = 3470;
+  fra.me.meth = LOCATE_parser___ReduceAction78___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13156,102 +11903,79 @@ void parser___ReduceAction77___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3518 */
+  /* parser/parser.nit:3472 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3519 */
+  /* parser/parser.nit:3473 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3520 */
+  /* parser/parser.nit:3474 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3521 */
+  /* parser/parser.nit:3475 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3522 */
+  /* parser/parser.nit:3476 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3523 */
+  /* parser/parser.nit:3477 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3524 */
+  /* parser/parser.nit:3478 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3525 */
+  /* parser/parser.nit:3479 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3527 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3481 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3481);
   }
-  /* ./parser//parser.nit:3529 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3483 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3529);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3483);
   }
-  /* ./parser//parser.nit:3531 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3485 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3485);
   }
-  /* ./parser//parser.nit:3533 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3487 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3487);
   }
-  /* ./parser//parser.nit:3535 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3489 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3489);
   }
-  /* ./parser//parser.nit:3536 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3546 */
+  /* parser/parser.nit:3490 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3500 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3547 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction77____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3501 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3547);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3501);
   }
-  REGB0 = ATTR_parser___ReduceAction77____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction77___init(val_t p0, val_t p1, int* init_table){
-  int itpos80 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction77].i;
-  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;
-  fra.me.line = 3550;
-  fra.me.meth = LOCATE_parser___ReduceAction77___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3550 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction77____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos80] = 1;
-  return;
-}
-void parser___ReduceAction78___action(val_t p0, val_t p1){
+void parser___ReduceAction79___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3554;
-  fra.me.meth = LOCATE_parser___ReduceAction78___action;
+  fra.me.line = 3506;
+  fra.me.meth = LOCATE_parser___ReduceAction79___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13263,110 +11987,87 @@ void parser___ReduceAction78___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3556 */
+  /* parser/parser.nit:3508 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3557 */
+  /* parser/parser.nit:3509 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3558 */
+  /* parser/parser.nit:3510 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3559 */
+  /* parser/parser.nit:3511 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3560 */
+  /* parser/parser.nit:3512 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3561 */
+  /* parser/parser.nit:3513 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3562 */
+  /* parser/parser.nit:3514 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3563 */
+  /* parser/parser.nit:3515 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3564 */
+  /* parser/parser.nit:3516 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3566 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3518 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3518);
   }
-  /* ./parser//parser.nit:3568 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3520 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3520);
   }
-  /* ./parser//parser.nit:3570 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3522 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3522);
   }
-  /* ./parser//parser.nit:3572 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3524 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3524);
   }
-  /* ./parser//parser.nit:3574 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3526 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3526);
   }
-  /* ./parser//parser.nit:3576 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3528 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3576);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3528);
   }
-  /* ./parser//parser.nit:3577 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3587 */
+  /* parser/parser.nit:3529 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3539 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3588 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction78____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3540 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3540);
   }
-  REGB0 = ATTR_parser___ReduceAction78____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction78___init(val_t p0, val_t p1, int* init_table){
-  int itpos81 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction78].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction80___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos81]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3591;
-  fra.me.meth = LOCATE_parser___ReduceAction78___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3591 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction78____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos81] = 1;
-  return;
-}
-void parser___ReduceAction79___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3595;
-  fra.me.meth = LOCATE_parser___ReduceAction79___action;
+  fra.me.line = 3545;
+  fra.me.meth = LOCATE_parser___ReduceAction80___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13378,110 +12079,87 @@ void parser___ReduceAction79___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3597 */
+  /* parser/parser.nit:3547 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3598 */
+  /* parser/parser.nit:3548 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3599 */
+  /* parser/parser.nit:3549 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3600 */
+  /* parser/parser.nit:3550 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3601 */
+  /* parser/parser.nit:3551 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3602 */
+  /* parser/parser.nit:3552 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3603 */
+  /* parser/parser.nit:3553 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3604 */
+  /* parser/parser.nit:3554 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3605 */
+  /* parser/parser.nit:3555 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3607 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3557 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3557);
   }
-  /* ./parser//parser.nit:3609 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3559 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3559);
   }
-  /* ./parser//parser.nit:3611 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3561 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3561);
   }
-  /* ./parser//parser.nit:3613 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3563 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3563);
   }
-  /* ./parser//parser.nit:3615 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3565 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3565);
   }
-  /* ./parser//parser.nit:3617 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:3567 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3567);
   }
-  /* ./parser//parser.nit:3618 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3628 */
+  /* parser/parser.nit:3568 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:3578 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3629 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction79____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3579 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3629);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3579);
   }
-  REGB0 = ATTR_parser___ReduceAction79____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction79___init(val_t p0, val_t p1, int* init_table){
-  int itpos82 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction79].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;
-  fra.me.line = 3632;
-  fra.me.meth = LOCATE_parser___ReduceAction79___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3632 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction79____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos82] = 1;
-  return;
-}
-void parser___ReduceAction80___action(val_t p0, val_t p1){
+void parser___ReduceAction81___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3636;
-  fra.me.meth = LOCATE_parser___ReduceAction80___action;
+  fra.me.line = 3584;
+  fra.me.meth = LOCATE_parser___ReduceAction81___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13494,118 +12172,95 @@ void parser___ReduceAction80___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3638 */
+  /* parser/parser.nit:3586 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3639 */
+  /* parser/parser.nit:3587 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3640 */
+  /* parser/parser.nit:3588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3641 */
+  /* parser/parser.nit:3589 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3642 */
+  /* parser/parser.nit:3590 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3643 */
+  /* parser/parser.nit:3591 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3644 */
+  /* parser/parser.nit:3592 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3645 */
+  /* parser/parser.nit:3593 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3646 */
+  /* parser/parser.nit:3594 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3647 */
+  /* parser/parser.nit:3595 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3649 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3597 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3597);
   }
-  /* ./parser//parser.nit:3651 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3599 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3599);
   }
-  /* ./parser//parser.nit:3653 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3601 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3601);
   }
-  /* ./parser//parser.nit:3655 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3603 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3603);
   }
-  /* ./parser//parser.nit:3657 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3605 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3605);
   }
-  /* ./parser//parser.nit:3659 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3607 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3607);
   }
-  /* ./parser//parser.nit:3661 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:3609 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3609);
   }
-  /* ./parser//parser.nit:3662 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:3672 */
+  /* parser/parser.nit:3610 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:3620 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3673 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction80____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3621 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3673);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3621);
   }
-  REGB0 = ATTR_parser___ReduceAction80____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction80___init(val_t p0, val_t p1, int* init_table){
-  int itpos83 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction80].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos83]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3676;
-  fra.me.meth = LOCATE_parser___ReduceAction80___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3676 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction80____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos83] = 1;
-  return;
-}
-void parser___ReduceAction81___action(val_t p0, val_t p1){
+void parser___ReduceAction82___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3680;
-  fra.me.meth = LOCATE_parser___ReduceAction81___action;
+  fra.me.line = 3626;
+  fra.me.meth = LOCATE_parser___ReduceAction82___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13617,110 +12272,87 @@ void parser___ReduceAction81___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3682 */
+  /* parser/parser.nit:3628 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3683 */
+  /* parser/parser.nit:3629 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3684 */
+  /* parser/parser.nit:3630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3685 */
+  /* parser/parser.nit:3631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3686 */
+  /* parser/parser.nit:3632 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3687 */
+  /* parser/parser.nit:3633 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3688 */
+  /* parser/parser.nit:3634 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3689 */
+  /* parser/parser.nit:3635 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3690 */
+  /* parser/parser.nit:3636 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3692 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3638 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3638);
   }
-  /* ./parser//parser.nit:3694 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3640 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3694);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3640);
   }
-  /* ./parser//parser.nit:3696 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3642 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3642);
   }
-  /* ./parser//parser.nit:3698 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3644 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3644);
   }
-  /* ./parser//parser.nit:3700 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3646 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3646);
   }
-  /* ./parser//parser.nit:3702 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:3648 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3648);
   }
-  /* ./parser//parser.nit:3703 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3713 */
+  /* parser/parser.nit:3649 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:3659 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3714 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction81____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3660 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3714);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3660);
   }
-  REGB0 = ATTR_parser___ReduceAction81____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction81___init(val_t p0, val_t p1, int* init_table){
-  int itpos84 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction81].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;
-  fra.me.line = 3717;
-  fra.me.meth = LOCATE_parser___ReduceAction81___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3717 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction81____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos84] = 1;
-  return;
-}
-void parser___ReduceAction82___action(val_t p0, val_t p1){
+void parser___ReduceAction83___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3721;
-  fra.me.meth = LOCATE_parser___ReduceAction82___action;
+  fra.me.line = 3665;
+  fra.me.meth = LOCATE_parser___ReduceAction83___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13733,118 +12365,95 @@ void parser___ReduceAction82___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3723 */
+  /* parser/parser.nit:3667 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3724 */
+  /* parser/parser.nit:3668 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3725 */
+  /* parser/parser.nit:3669 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3726 */
+  /* parser/parser.nit:3670 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3727 */
+  /* parser/parser.nit:3671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3728 */
+  /* parser/parser.nit:3672 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3729 */
+  /* parser/parser.nit:3673 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3730 */
+  /* parser/parser.nit:3674 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3731 */
+  /* parser/parser.nit:3675 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3732 */
+  /* parser/parser.nit:3676 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3734 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3678 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3734);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3678);
   }
-  /* ./parser//parser.nit:3736 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3680 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3736);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3680);
   }
-  /* ./parser//parser.nit:3738 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3682 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3738);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3682);
   }
-  /* ./parser//parser.nit:3740 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3684 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3684);
   }
-  /* ./parser//parser.nit:3742 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3686 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3686);
   }
-  /* ./parser//parser.nit:3744 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3688 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3688);
   }
-  /* ./parser//parser.nit:3746 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:3690 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3690);
   }
-  /* ./parser//parser.nit:3747 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:3757 */
+  /* parser/parser.nit:3691 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:3701 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3758 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction82____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3702 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3758);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3702);
   }
-  REGB0 = ATTR_parser___ReduceAction82____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction82___init(val_t p0, val_t p1, int* init_table){
-  int itpos85 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction82].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos85]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3761;
-  fra.me.meth = LOCATE_parser___ReduceAction82___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3761 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction82____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos85] = 1;
-  return;
-}
-void parser___ReduceAction83___action(val_t p0, val_t p1){
+void parser___ReduceAction84___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3765;
-  fra.me.meth = LOCATE_parser___ReduceAction83___action;
+  fra.me.line = 3707;
+  fra.me.meth = LOCATE_parser___ReduceAction84___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13857,118 +12466,95 @@ void parser___ReduceAction83___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3767 */
+  /* parser/parser.nit:3709 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3768 */
+  /* parser/parser.nit:3710 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3769 */
+  /* parser/parser.nit:3711 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3770 */
+  /* parser/parser.nit:3712 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3771 */
+  /* parser/parser.nit:3713 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3772 */
+  /* parser/parser.nit:3714 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3773 */
+  /* parser/parser.nit:3715 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3774 */
+  /* parser/parser.nit:3716 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3775 */
+  /* parser/parser.nit:3717 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3776 */
+  /* parser/parser.nit:3718 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3778 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3720 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3778);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3720);
   }
-  /* ./parser//parser.nit:3780 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3722 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3780);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3722);
   }
-  /* ./parser//parser.nit:3782 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3724 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3782);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3724);
   }
-  /* ./parser//parser.nit:3784 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3726 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3784);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3726);
   }
-  /* ./parser//parser.nit:3786 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3728 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3728);
   }
-  /* ./parser//parser.nit:3788 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:3730 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3730);
   }
-  /* ./parser//parser.nit:3790 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:3732 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3732);
   }
-  /* ./parser//parser.nit:3791 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3801 */
+  /* parser/parser.nit:3733 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3743 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3802 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction83____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3744 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3802);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3744);
   }
-  REGB0 = ATTR_parser___ReduceAction83____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction83___init(val_t p0, val_t p1, int* init_table){
-  int itpos86 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction83].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;
-  fra.me.line = 3805;
-  fra.me.meth = LOCATE_parser___ReduceAction83___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3805 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction83____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos86] = 1;
-  return;
-}
-void parser___ReduceAction84___action(val_t p0, val_t p1){
+void parser___ReduceAction85___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3809;
-  fra.me.meth = LOCATE_parser___ReduceAction84___action;
+  fra.me.line = 3749;
+  fra.me.meth = LOCATE_parser___ReduceAction85___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -13982,126 +12568,103 @@ void parser___ReduceAction84___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3811 */
+  /* parser/parser.nit:3751 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3812 */
+  /* parser/parser.nit:3752 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3813 */
+  /* parser/parser.nit:3753 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3814 */
+  /* parser/parser.nit:3754 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3815 */
+  /* parser/parser.nit:3755 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3816 */
+  /* parser/parser.nit:3756 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3817 */
+  /* parser/parser.nit:3757 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3818 */
+  /* parser/parser.nit:3758 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3819 */
+  /* parser/parser.nit:3759 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3820 */
+  /* parser/parser.nit:3760 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3821 */
+  /* parser/parser.nit:3761 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3823 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3763 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3763);
   }
-  /* ./parser//parser.nit:3825 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3765 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3825);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3765);
   }
-  /* ./parser//parser.nit:3827 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3767 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3827);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3767);
   }
-  /* ./parser//parser.nit:3829 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwmeth, ID_TKwmeth)) /*cast nullable TKwmeth*/;
+  /* parser/parser.nit:3769 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwmeth, ID_parser___parser_nodes___TKwmeth)) /*cast nullable TKwmeth*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3829);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3769);
   }
-  /* ./parser//parser.nit:3831 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:3771 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3771);
   }
-  /* ./parser//parser.nit:3833 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:3773 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3773);
   }
-  /* ./parser//parser.nit:3835 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:3775 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3775);
   }
-  /* ./parser//parser.nit:3837 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCalls, ID_AExternCalls)) /*cast nullable AExternCalls*/;
+  /* parser/parser.nit:3777 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3777);
   }
-  /* ./parser//parser.nit:3838 */
-  fra.me.REG[3] = NEW_AExternMethPropdef_parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:3848 */
+  /* parser/parser.nit:3778 */
+  fra.me.REG[3] = NEW_AExternMethPropdef_parser___parser_prod___AExternMethPropdef___init_aexternmethpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:3788 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3849 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction84____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3789 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3849);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3789);
   }
-  REGB0 = ATTR_parser___ReduceAction84____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction84___init(val_t p0, val_t p1, int* init_table){
-  int itpos87 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction84].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos87]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3852;
-  fra.me.meth = LOCATE_parser___ReduceAction84___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3852 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction84____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos87] = 1;
-  return;
-}
-void parser___ReduceAction85___action(val_t p0, val_t p1){
+void parser___ReduceAction86___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3856;
-  fra.me.meth = LOCATE_parser___ReduceAction85___action;
+  fra.me.line = 3794;
+  fra.me.meth = LOCATE_parser___ReduceAction86___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14111,90 +12674,67 @@ void parser___ReduceAction85___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3858 */
+  /* parser/parser.nit:3796 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3859 */
+  /* parser/parser.nit:3797 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3860 */
+  /* parser/parser.nit:3798 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3861 */
+  /* parser/parser.nit:3799 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3862 */
+  /* parser/parser.nit:3800 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3864 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3802 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3864);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3802);
   }
-  /* ./parser//parser.nit:3866 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3804 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3804);
   }
-  /* ./parser//parser.nit:3868 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3806 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3806);
   }
-  /* ./parser//parser.nit:3870 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3808 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3808);
   }
-  /* ./parser//parser.nit:3871 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3883 */
+  /* parser/parser.nit:3809 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3821 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3884 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction85____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3822 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3884);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3822);
   }
-  REGB0 = ATTR_parser___ReduceAction85____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction85___init(val_t p0, val_t p1, int* init_table){
-  int itpos88 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction85].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 3887;
-  fra.me.meth = LOCATE_parser___ReduceAction85___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3887 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction85____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos88] = 1;
-  return;
-}
-void parser___ReduceAction86___action(val_t p0, val_t p1){
+void parser___ReduceAction87___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3891;
-  fra.me.meth = LOCATE_parser___ReduceAction86___action;
+  fra.me.line = 3827;
+  fra.me.meth = LOCATE_parser___ReduceAction87___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14205,98 +12745,75 @@ void parser___ReduceAction86___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3893 */
+  /* parser/parser.nit:3829 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3894 */
+  /* parser/parser.nit:3830 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3895 */
+  /* parser/parser.nit:3831 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3896 */
+  /* parser/parser.nit:3832 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3897 */
+  /* parser/parser.nit:3833 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3898 */
+  /* parser/parser.nit:3834 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3900 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3836 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3900);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3836);
   }
-  /* ./parser//parser.nit:3902 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3838 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3902);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3838);
   }
-  /* ./parser//parser.nit:3904 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3840 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3904);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3840);
   }
-  /* ./parser//parser.nit:3906 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3842 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3842);
   }
-  /* ./parser//parser.nit:3908 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3844 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3844);
   }
-  /* ./parser//parser.nit:3909 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3921 */
+  /* parser/parser.nit:3845 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3857 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3922 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction86____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3858 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3922);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3858);
   }
-  REGB0 = ATTR_parser___ReduceAction86____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction86___init(val_t p0, val_t p1, int* init_table){
-  int itpos89 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction86].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos89]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3925;
-  fra.me.meth = LOCATE_parser___ReduceAction86___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3925 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction86____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos89] = 1;
-  return;
-}
-void parser___ReduceAction87___action(val_t p0, val_t p1){
+void parser___ReduceAction88___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3929;
-  fra.me.meth = LOCATE_parser___ReduceAction87___action;
+  fra.me.line = 3863;
+  fra.me.meth = LOCATE_parser___ReduceAction88___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14307,98 +12824,75 @@ void parser___ReduceAction87___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3931 */
+  /* parser/parser.nit:3865 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3932 */
+  /* parser/parser.nit:3866 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3933 */
+  /* parser/parser.nit:3867 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3934 */
+  /* parser/parser.nit:3868 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3935 */
+  /* parser/parser.nit:3869 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3936 */
+  /* parser/parser.nit:3870 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3938 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3872 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3938);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3872);
   }
-  /* ./parser//parser.nit:3940 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:3874 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3940);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3874);
   }
-  /* ./parser//parser.nit:3942 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3876 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3942);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3876);
   }
-  /* ./parser//parser.nit:3944 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3878 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3944);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3878);
   }
-  /* ./parser//parser.nit:3946 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3880 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3946);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3880);
   }
-  /* ./parser//parser.nit:3947 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:3959 */
+  /* parser/parser.nit:3881 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], fra.me.REG[6], NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3893 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:3960 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction87____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3894 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3960);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3894);
   }
-  REGB0 = ATTR_parser___ReduceAction87____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction87___init(val_t p0, val_t p1, int* init_table){
-  int itpos90 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction87].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos90]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 3963;
-  fra.me.meth = LOCATE_parser___ReduceAction87___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:3963 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction87____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos90] = 1;
-  return;
-}
-void parser___ReduceAction88___action(val_t p0, val_t p1){
+void parser___ReduceAction89___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 3967;
-  fra.me.meth = LOCATE_parser___ReduceAction88___action;
+  fra.me.line = 3899;
+  fra.me.meth = LOCATE_parser___ReduceAction89___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14410,106 +12904,83 @@ void parser___ReduceAction88___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:3969 */
+  /* parser/parser.nit:3901 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:3970 */
+  /* parser/parser.nit:3902 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3971 */
+  /* parser/parser.nit:3903 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3972 */
+  /* parser/parser.nit:3904 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3973 */
+  /* parser/parser.nit:3905 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3974 */
+  /* parser/parser.nit:3906 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3975 */
+  /* parser/parser.nit:3907 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:3977 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3909 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3977);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3909);
   }
-  /* ./parser//parser.nit:3979 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:3911 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3979);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3911);
   }
-  /* ./parser//parser.nit:3981 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3913 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3981);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3913);
   }
-  /* ./parser//parser.nit:3983 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3915 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3983);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3915);
   }
-  /* ./parser//parser.nit:3985 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3917 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3985);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3917);
   }
-  /* ./parser//parser.nit:3987 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3919 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 3987);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3919);
   }
-  /* ./parser//parser.nit:3988 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4000 */
+  /* parser/parser.nit:3920 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3932 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4001 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction88____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3933 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4001);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3933);
   }
-  REGB0 = ATTR_parser___ReduceAction88____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction88___init(val_t p0, val_t p1, int* init_table){
-  int itpos91 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction88].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos91]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4004;
-  fra.me.meth = LOCATE_parser___ReduceAction88___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4004 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction88____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos91] = 1;
-  return;
-}
-void parser___ReduceAction89___action(val_t p0, val_t p1){
+void parser___ReduceAction90___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4008;
-  fra.me.meth = LOCATE_parser___ReduceAction89___action;
+  fra.me.line = 3938;
+  fra.me.meth = LOCATE_parser___ReduceAction90___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14520,98 +12991,75 @@ void parser___ReduceAction89___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4010 */
+  /* parser/parser.nit:3940 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4011 */
+  /* parser/parser.nit:3941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4012 */
+  /* parser/parser.nit:3942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4013 */
+  /* parser/parser.nit:3943 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4014 */
+  /* parser/parser.nit:3944 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4015 */
+  /* parser/parser.nit:3945 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4017 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3947 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3947);
   }
-  /* ./parser//parser.nit:4019 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:3949 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3949);
   }
-  /* ./parser//parser.nit:4021 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3951 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3951);
   }
-  /* ./parser//parser.nit:4023 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3953 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3953);
   }
-  /* ./parser//parser.nit:4025 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3955 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3955);
   }
-  /* ./parser//parser.nit:4026 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4038 */
+  /* parser/parser.nit:3956 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:3968 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4039 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction89____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:3969 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4039);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 3969);
   }
-  REGB0 = ATTR_parser___ReduceAction89____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction89___init(val_t p0, val_t p1, int* init_table){
-  int itpos92 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction89].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos92]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4042;
-  fra.me.meth = LOCATE_parser___ReduceAction89___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4042 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction89____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos92] = 1;
-  return;
-}
-void parser___ReduceAction90___action(val_t p0, val_t p1){
+void parser___ReduceAction91___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4046;
-  fra.me.meth = LOCATE_parser___ReduceAction90___action;
+  fra.me.line = 3974;
+  fra.me.meth = LOCATE_parser___ReduceAction91___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14623,106 +13071,83 @@ void parser___ReduceAction90___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4048 */
+  /* parser/parser.nit:3976 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4049 */
+  /* parser/parser.nit:3977 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4050 */
+  /* parser/parser.nit:3978 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4051 */
+  /* parser/parser.nit:3979 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4052 */
+  /* parser/parser.nit:3980 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4053 */
+  /* parser/parser.nit:3981 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4054 */
+  /* parser/parser.nit:3982 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4056 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:3984 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3984);
   }
-  /* ./parser//parser.nit:4058 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:3986 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3986);
   }
-  /* ./parser//parser.nit:4060 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:3988 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3988);
   }
-  /* ./parser//parser.nit:4062 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:3990 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3990);
   }
-  /* ./parser//parser.nit:4064 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:3992 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4064);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3992);
   }
-  /* ./parser//parser.nit:4066 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:3994 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4066);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 3994);
   }
-  /* ./parser//parser.nit:4067 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4079 */
+  /* parser/parser.nit:3995 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:4007 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4080 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction90____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4008 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4080);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4008);
   }
-  REGB0 = ATTR_parser___ReduceAction90____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction90___init(val_t p0, val_t p1, int* init_table){
-  int itpos93 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction90].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos93]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4083;
-  fra.me.meth = LOCATE_parser___ReduceAction90___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4083 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction90____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos93] = 1;
-  return;
-}
-void parser___ReduceAction91___action(val_t p0, val_t p1){
+void parser___ReduceAction92___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4087;
-  fra.me.meth = LOCATE_parser___ReduceAction91___action;
+  fra.me.line = 4013;
+  fra.me.meth = LOCATE_parser___ReduceAction92___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14734,226 +13159,180 @@ void parser___ReduceAction91___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4089 */
+  /* parser/parser.nit:4015 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4090 */
+  /* parser/parser.nit:4016 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4091 */
+  /* parser/parser.nit:4017 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4092 */
+  /* parser/parser.nit:4018 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4093 */
+  /* parser/parser.nit:4019 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4094 */
+  /* parser/parser.nit:4020 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4095 */
+  /* parser/parser.nit:4021 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4097 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4023 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4097);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4023);
   }
-  /* ./parser//parser.nit:4099 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4025 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4099);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4025);
   }
-  /* ./parser//parser.nit:4101 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4027 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4101);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4027);
   }
-  /* ./parser//parser.nit:4103 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4029 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4103);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4029);
   }
-  /* ./parser//parser.nit:4105 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4031 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4105);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4031);
   }
-  /* ./parser//parser.nit:4107 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4033 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4107);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4033);
   }
-  /* ./parser//parser.nit:4108 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4120 */
+  /* parser/parser.nit:4034 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:4046 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4121 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction91____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4047 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4121);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4047);
   }
-  REGB0 = ATTR_parser___ReduceAction91____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction91___init(val_t p0, val_t p1, int* init_table){
-  int itpos94 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction91].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction93___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos94]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4124;
-  fra.me.meth = LOCATE_parser___ReduceAction91___init;
+  fra.me.line = 4052;
+  fra.me.meth = LOCATE_parser___ReduceAction93___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4124 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction91____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos94] = 1;
-  return;
-}
-void parser___ReduceAction92___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4128;
-  fra.me.meth = LOCATE_parser___ReduceAction92___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
-  fra.me.REG[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[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;
-  /* ./parser//parser.nit:4130 */
+  /* parser/parser.nit:4054 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4131 */
+  /* parser/parser.nit:4055 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4132 */
+  /* parser/parser.nit:4056 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4133 */
+  /* parser/parser.nit:4057 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4134 */
+  /* parser/parser.nit:4058 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4135 */
+  /* parser/parser.nit:4059 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4136 */
+  /* parser/parser.nit:4060 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4137 */
+  /* parser/parser.nit:4061 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4139 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4063 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4139);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4063);
   }
-  /* ./parser//parser.nit:4141 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4065 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4141);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4065);
   }
-  /* ./parser//parser.nit:4143 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4067 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4143);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4067);
   }
-  /* ./parser//parser.nit:4145 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4069 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4145);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4069);
   }
-  /* ./parser//parser.nit:4147 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4071 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4147);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4071);
   }
-  /* ./parser//parser.nit:4149 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4073 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4073);
   }
-  /* ./parser//parser.nit:4151 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4075 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4075);
   }
-  /* ./parser//parser.nit:4152 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:4164 */
+  /* parser/parser.nit:4076 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:4088 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4165 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction92____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4089 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4165);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4089);
   }
-  REGB0 = ATTR_parser___ReduceAction92____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction92___init(val_t p0, val_t p1, int* init_table){
-  int itpos95 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction92].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos95]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4168;
-  fra.me.meth = LOCATE_parser___ReduceAction92___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4168 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction92____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos95] = 1;
-  return;
-}
-void parser___ReduceAction93___action(val_t p0, val_t p1){
+void parser___ReduceAction94___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4172;
-  fra.me.meth = LOCATE_parser___ReduceAction93___action;
+  fra.me.line = 4094;
+  fra.me.meth = LOCATE_parser___ReduceAction94___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -14964,98 +13343,75 @@ void parser___ReduceAction93___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4174 */
+  /* parser/parser.nit:4096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4175 */
+  /* parser/parser.nit:4097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4176 */
+  /* parser/parser.nit:4098 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4177 */
+  /* parser/parser.nit:4099 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4178 */
+  /* parser/parser.nit:4100 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4179 */
+  /* parser/parser.nit:4101 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4181 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4103 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4181);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4103);
   }
-  /* ./parser//parser.nit:4183 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4105 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4183);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4105);
   }
-  /* ./parser//parser.nit:4185 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4107 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4107);
   }
-  /* ./parser//parser.nit:4187 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4109 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4187);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4109);
   }
-  /* ./parser//parser.nit:4189 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4111 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4189);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4111);
   }
-  /* ./parser//parser.nit:4190 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4202 */
+  /* parser/parser.nit:4112 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4124 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4203 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction93____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4125 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4203);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4125);
   }
-  REGB0 = ATTR_parser___ReduceAction93____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction93___init(val_t p0, val_t p1, int* init_table){
-  int itpos96 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction93].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos96]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4206;
-  fra.me.meth = LOCATE_parser___ReduceAction93___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4206 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction93____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos96] = 1;
-  return;
-}
-void parser___ReduceAction94___action(val_t p0, val_t p1){
+void parser___ReduceAction95___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4210;
-  fra.me.meth = LOCATE_parser___ReduceAction94___action;
+  fra.me.line = 4130;
+  fra.me.meth = LOCATE_parser___ReduceAction95___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15067,106 +13423,83 @@ void parser___ReduceAction94___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4212 */
+  /* parser/parser.nit:4132 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4213 */
+  /* parser/parser.nit:4133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4214 */
+  /* parser/parser.nit:4134 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4215 */
+  /* parser/parser.nit:4135 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4216 */
+  /* parser/parser.nit:4136 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4217 */
+  /* parser/parser.nit:4137 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4218 */
+  /* parser/parser.nit:4138 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4220 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4140 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4220);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4140);
   }
-  /* ./parser//parser.nit:4222 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4142 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4142);
   }
-  /* ./parser//parser.nit:4224 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4144 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4224);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4144);
   }
-  /* ./parser//parser.nit:4226 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4146 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4226);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4146);
   }
-  /* ./parser//parser.nit:4228 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4148 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4228);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4148);
   }
-  /* ./parser//parser.nit:4230 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4150 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4230);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4150);
   }
-  /* ./parser//parser.nit:4231 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4243 */
+  /* parser/parser.nit:4151 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4163 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4244 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction94____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4164 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4164);
   }
-  REGB0 = ATTR_parser___ReduceAction94____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction94___init(val_t p0, val_t p1, int* init_table){
-  int itpos97 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction94].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos97]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4247;
-  fra.me.meth = LOCATE_parser___ReduceAction94___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4247 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction94____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos97] = 1;
-  return;
-}
-void parser___ReduceAction95___action(val_t p0, val_t p1){
+void parser___ReduceAction96___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4251;
-  fra.me.meth = LOCATE_parser___ReduceAction95___action;
+  fra.me.line = 4169;
+  fra.me.meth = LOCATE_parser___ReduceAction96___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15178,106 +13511,83 @@ void parser___ReduceAction95___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4253 */
+  /* parser/parser.nit:4171 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4254 */
+  /* parser/parser.nit:4172 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4255 */
+  /* parser/parser.nit:4173 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4256 */
+  /* parser/parser.nit:4174 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4257 */
+  /* parser/parser.nit:4175 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4258 */
+  /* parser/parser.nit:4176 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4259 */
+  /* parser/parser.nit:4177 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4261 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4179 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4179);
   }
-  /* ./parser//parser.nit:4263 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4181 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4263);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4181);
   }
-  /* ./parser//parser.nit:4265 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4183 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4265);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4183);
   }
-  /* ./parser//parser.nit:4267 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4185 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4267);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4185);
   }
-  /* ./parser//parser.nit:4269 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4187 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4269);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4187);
   }
-  /* ./parser//parser.nit:4271 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4189 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4271);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4189);
   }
-  /* ./parser//parser.nit:4272 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4284 */
+  /* parser/parser.nit:4190 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4202 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4285 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction95____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4203 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4285);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4203);
   }
-  REGB0 = ATTR_parser___ReduceAction95____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction95___init(val_t p0, val_t p1, int* init_table){
-  int itpos98 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction95].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos98]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4288;
-  fra.me.meth = LOCATE_parser___ReduceAction95___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4288 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction95____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos98] = 1;
-  return;
-}
-void parser___ReduceAction96___action(val_t p0, val_t p1){
+void parser___ReduceAction97___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4292;
-  fra.me.meth = LOCATE_parser___ReduceAction96___action;
+  fra.me.line = 4208;
+  fra.me.meth = LOCATE_parser___ReduceAction97___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15290,114 +13600,91 @@ void parser___ReduceAction96___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4294 */
+  /* parser/parser.nit:4210 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4295 */
+  /* parser/parser.nit:4211 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4296 */
+  /* parser/parser.nit:4212 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4297 */
+  /* parser/parser.nit:4213 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4298 */
+  /* parser/parser.nit:4214 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4299 */
+  /* parser/parser.nit:4215 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4300 */
+  /* parser/parser.nit:4216 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4301 */
+  /* parser/parser.nit:4217 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4303 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4219 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4219);
   }
-  /* ./parser//parser.nit:4305 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4221 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4221);
   }
-  /* ./parser//parser.nit:4307 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4223 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4307);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4223);
   }
-  /* ./parser//parser.nit:4309 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4225 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4309);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4225);
   }
-  /* ./parser//parser.nit:4311 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4227 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4227);
   }
-  /* ./parser//parser.nit:4313 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4229 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4313);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4229);
   }
-  /* ./parser//parser.nit:4315 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4231 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4315);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4231);
   }
-  /* ./parser//parser.nit:4316 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4328 */
+  /* parser/parser.nit:4232 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4244 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4329 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction96____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4245 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4329);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4245);
   }
-  REGB0 = ATTR_parser___ReduceAction96____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction96___init(val_t p0, val_t p1, int* init_table){
-  int itpos99 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction96].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos99]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4332;
-  fra.me.meth = LOCATE_parser___ReduceAction96___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4332 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction96____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos99] = 1;
-  return;
-}
-void parser___ReduceAction97___action(val_t p0, val_t p1){
+void parser___ReduceAction98___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4336;
-  fra.me.meth = LOCATE_parser___ReduceAction97___action;
+  fra.me.line = 4250;
+  fra.me.meth = LOCATE_parser___ReduceAction98___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15409,106 +13696,83 @@ void parser___ReduceAction97___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4338 */
+  /* parser/parser.nit:4252 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4339 */
+  /* parser/parser.nit:4253 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4340 */
+  /* parser/parser.nit:4254 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4341 */
+  /* parser/parser.nit:4255 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4342 */
+  /* parser/parser.nit:4256 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4343 */
+  /* parser/parser.nit:4257 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4344 */
+  /* parser/parser.nit:4258 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4346 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4260 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4260);
   }
-  /* ./parser//parser.nit:4348 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4262 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4262);
   }
-  /* ./parser//parser.nit:4350 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4264 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4350);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4264);
   }
-  /* ./parser//parser.nit:4352 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4266 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4352);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4266);
   }
-  /* ./parser//parser.nit:4354 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4268 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4268);
   }
-  /* ./parser//parser.nit:4356 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4270 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4356);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4270);
   }
-  /* ./parser//parser.nit:4357 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4369 */
+  /* parser/parser.nit:4271 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4283 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4370 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction97____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4284 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4370);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4284);
   }
-  REGB0 = ATTR_parser___ReduceAction97____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction97___init(val_t p0, val_t p1, int* init_table){
-  int itpos100 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction97].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos100]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4373;
-  fra.me.meth = LOCATE_parser___ReduceAction97___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4373 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction97____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos100] = 1;
-  return;
-}
-void parser___ReduceAction98___action(val_t p0, val_t p1){
+void parser___ReduceAction99___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4377;
-  fra.me.meth = LOCATE_parser___ReduceAction98___action;
+  fra.me.line = 4289;
+  fra.me.meth = LOCATE_parser___ReduceAction99___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15521,114 +13785,91 @@ void parser___ReduceAction98___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4379 */
+  /* parser/parser.nit:4291 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4380 */
+  /* parser/parser.nit:4292 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4381 */
+  /* parser/parser.nit:4293 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4382 */
+  /* parser/parser.nit:4294 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4383 */
+  /* parser/parser.nit:4295 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4384 */
+  /* parser/parser.nit:4296 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4385 */
+  /* parser/parser.nit:4297 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4386 */
+  /* parser/parser.nit:4298 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4388 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4300 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4388);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4300);
   }
-  /* ./parser//parser.nit:4390 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4302 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4390);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4302);
   }
-  /* ./parser//parser.nit:4392 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4304 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4392);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4304);
   }
-  /* ./parser//parser.nit:4394 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4306 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4394);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4306);
   }
-  /* ./parser//parser.nit:4396 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4308 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4396);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4308);
   }
-  /* ./parser//parser.nit:4398 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4398);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4310);
   }
-  /* ./parser//parser.nit:4400 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4312 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4400);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4312);
   }
-  /* ./parser//parser.nit:4401 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4413 */
+  /* parser/parser.nit:4313 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4325 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4414 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction98____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4326 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4414);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4326);
   }
-  REGB0 = ATTR_parser___ReduceAction98____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction98___init(val_t p0, val_t p1, int* init_table){
-  int itpos101 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction98].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos101]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4417;
-  fra.me.meth = LOCATE_parser___ReduceAction98___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4417 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction98____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos101] = 1;
-  return;
-}
-void parser___ReduceAction99___action(val_t p0, val_t p1){
+void parser___ReduceAction100___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4421;
-  fra.me.meth = LOCATE_parser___ReduceAction99___action;
+  fra.me.line = 4331;
+  fra.me.meth = LOCATE_parser___ReduceAction100___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15641,114 +13882,91 @@ void parser___ReduceAction99___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4423 */
+  /* parser/parser.nit:4333 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4424 */
+  /* parser/parser.nit:4334 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4425 */
+  /* parser/parser.nit:4335 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4426 */
+  /* parser/parser.nit:4336 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4427 */
+  /* parser/parser.nit:4337 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4428 */
+  /* parser/parser.nit:4338 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4429 */
+  /* parser/parser.nit:4339 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4430 */
+  /* parser/parser.nit:4340 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4432 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4342 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4432);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4342);
   }
-  /* ./parser//parser.nit:4434 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4344 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4344);
   }
-  /* ./parser//parser.nit:4436 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4346 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4346);
   }
-  /* ./parser//parser.nit:4438 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4348 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4348);
   }
-  /* ./parser//parser.nit:4440 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4350 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4440);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4350);
   }
-  /* ./parser//parser.nit:4442 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4352 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4442);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4352);
   }
-  /* ./parser//parser.nit:4444 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4354 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4444);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4354);
   }
-  /* ./parser//parser.nit:4445 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4457 */
+  /* parser/parser.nit:4355 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4367 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4458 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction99____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4368 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4458);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4368);
   }
-  REGB0 = ATTR_parser___ReduceAction99____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction99___init(val_t p0, val_t p1, int* init_table){
-  int itpos102 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction99].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos102]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4461;
-  fra.me.meth = LOCATE_parser___ReduceAction99___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4461 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction99____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos102] = 1;
-  return;
-}
-void parser___ReduceAction100___action(val_t p0, val_t p1){
+void parser___ReduceAction101___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4465;
-  fra.me.meth = LOCATE_parser___ReduceAction100___action;
+  fra.me.line = 4373;
+  fra.me.meth = LOCATE_parser___ReduceAction101___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15762,122 +13980,99 @@ void parser___ReduceAction100___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4467 */
+  /* parser/parser.nit:4375 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4468 */
+  /* parser/parser.nit:4376 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4469 */
+  /* parser/parser.nit:4377 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4470 */
+  /* parser/parser.nit:4378 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4471 */
+  /* parser/parser.nit:4379 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4472 */
+  /* parser/parser.nit:4380 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4473 */
+  /* parser/parser.nit:4381 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4474 */
+  /* parser/parser.nit:4382 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4475 */
+  /* parser/parser.nit:4383 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4477 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4385 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4477);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4385);
   }
-  /* ./parser//parser.nit:4479 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4387 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4479);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4387);
   }
-  /* ./parser//parser.nit:4481 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4389 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4481);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4389);
   }
-  /* ./parser//parser.nit:4483 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4391 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4391);
   }
-  /* ./parser//parser.nit:4485 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4393 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4485);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4393);
   }
-  /* ./parser//parser.nit:4487 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4395 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4487);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4395);
   }
-  /* ./parser//parser.nit:4489 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4397 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4397);
   }
-  /* ./parser//parser.nit:4491 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4399 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4399);
   }
-  /* ./parser//parser.nit:4492 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:4504 */
+  /* parser/parser.nit:4400 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:4412 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4505 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction100____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4413 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4505);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4413);
   }
-  REGB0 = ATTR_parser___ReduceAction100____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction100___init(val_t p0, val_t p1, int* init_table){
-  int itpos103 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction100].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos103]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4508;
-  fra.me.meth = LOCATE_parser___ReduceAction100___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4508 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction100____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos103] = 1;
-  return;
-}
-void parser___ReduceAction101___action(val_t p0, val_t p1){
+void parser___ReduceAction102___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4512;
-  fra.me.meth = LOCATE_parser___ReduceAction101___action;
+  fra.me.line = 4418;
+  fra.me.meth = LOCATE_parser___ReduceAction102___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15888,102 +14083,79 @@ void parser___ReduceAction101___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4514 */
+  /* parser/parser.nit:4420 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4515 */
+  /* parser/parser.nit:4421 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4516 */
+  /* parser/parser.nit:4422 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4517 */
+  /* parser/parser.nit:4423 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4518 */
+  /* parser/parser.nit:4424 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4519 */
+  /* parser/parser.nit:4425 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4520 */
+  /* parser/parser.nit:4426 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4521 */
+  /* parser/parser.nit:4427 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4523 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4429 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4429);
   }
-  /* ./parser//parser.nit:4525 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4431 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4525);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4431);
   }
-  /* ./parser//parser.nit:4527 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4433 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4527);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4433);
   }
-  /* ./parser//parser.nit:4529 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4435 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4529);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4435);
   }
-  /* ./parser//parser.nit:4531 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4437 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4437);
   }
-  /* ./parser//parser.nit:4532 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4544 */
+  /* parser/parser.nit:4438 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4450 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4545 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction101____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4451 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4451);
   }
-  REGB0 = ATTR_parser___ReduceAction101____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction101___init(val_t p0, val_t p1, int* init_table){
-  int itpos104 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction101].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos104]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4548;
-  fra.me.meth = LOCATE_parser___ReduceAction101___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4548 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction101____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos104] = 1;
-  return;
-}
-void parser___ReduceAction102___action(val_t p0, val_t p1){
+void parser___ReduceAction103___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4552;
-  fra.me.meth = LOCATE_parser___ReduceAction102___action;
+  fra.me.line = 4456;
+  fra.me.meth = LOCATE_parser___ReduceAction103___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -15995,110 +14167,87 @@ void parser___ReduceAction102___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4554 */
+  /* parser/parser.nit:4458 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4555 */
+  /* parser/parser.nit:4459 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4556 */
+  /* parser/parser.nit:4460 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4557 */
+  /* parser/parser.nit:4461 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4558 */
+  /* parser/parser.nit:4462 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4559 */
+  /* parser/parser.nit:4463 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4560 */
+  /* parser/parser.nit:4464 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4561 */
+  /* parser/parser.nit:4465 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4562 */
+  /* parser/parser.nit:4466 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4564 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4468 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4564);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4468);
   }
-  /* ./parser//parser.nit:4566 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4470 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4566);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4470);
   }
-  /* ./parser//parser.nit:4568 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4472 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4568);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4472);
   }
-  /* ./parser//parser.nit:4570 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4474 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4570);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4474);
   }
-  /* ./parser//parser.nit:4572 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4476 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4572);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4476);
   }
-  /* ./parser//parser.nit:4574 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4478 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4478);
   }
-  /* ./parser//parser.nit:4575 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4587 */
+  /* parser/parser.nit:4479 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4491 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4588 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction102____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4492 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4588);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4492);
   }
-  REGB0 = ATTR_parser___ReduceAction102____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction102___init(val_t p0, val_t p1, int* init_table){
-  int itpos105 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction102].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos105]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4591;
-  fra.me.meth = LOCATE_parser___ReduceAction102___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4591 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction102____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos105] = 1;
-  return;
-}
-void parser___ReduceAction103___action(val_t p0, val_t p1){
+void parser___ReduceAction104___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4595;
-  fra.me.meth = LOCATE_parser___ReduceAction103___action;
+  fra.me.line = 4497;
+  fra.me.meth = LOCATE_parser___ReduceAction104___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16110,110 +14259,87 @@ void parser___ReduceAction103___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4597 */
+  /* parser/parser.nit:4499 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4598 */
+  /* parser/parser.nit:4500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4599 */
+  /* parser/parser.nit:4501 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4600 */
+  /* parser/parser.nit:4502 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4601 */
+  /* parser/parser.nit:4503 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4602 */
+  /* parser/parser.nit:4504 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4603 */
+  /* parser/parser.nit:4505 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4604 */
+  /* parser/parser.nit:4506 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4605 */
+  /* parser/parser.nit:4507 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4607 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4509 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4607);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4509);
   }
-  /* ./parser//parser.nit:4609 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4511 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4609);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4511);
   }
-  /* ./parser//parser.nit:4611 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4513 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4611);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4513);
   }
-  /* ./parser//parser.nit:4613 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4515 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4515);
   }
-  /* ./parser//parser.nit:4615 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4517 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4517);
   }
-  /* ./parser//parser.nit:4617 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4519 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4519);
   }
-  /* ./parser//parser.nit:4618 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4630 */
+  /* parser/parser.nit:4520 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4532 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4631 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction103____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4533 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4631);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4533);
   }
-  REGB0 = ATTR_parser___ReduceAction103____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction103___init(val_t p0, val_t p1, int* init_table){
-  int itpos106 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction103].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction105___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos106]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4634;
-  fra.me.meth = LOCATE_parser___ReduceAction103___init;
+  fra.me.line = 4538;
+  fra.me.meth = LOCATE_parser___ReduceAction105___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4634 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction103____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos106] = 1;
-  return;
-}
-void parser___ReduceAction104___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4638;
-  fra.me.meth = LOCATE_parser___ReduceAction104___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 10;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16226,118 +14352,95 @@ void parser___ReduceAction104___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4640 */
+  /* parser/parser.nit:4540 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4641 */
+  /* parser/parser.nit:4541 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4642 */
+  /* parser/parser.nit:4542 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4643 */
+  /* parser/parser.nit:4543 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4644 */
+  /* parser/parser.nit:4544 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4645 */
+  /* parser/parser.nit:4545 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4646 */
+  /* parser/parser.nit:4546 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4647 */
+  /* parser/parser.nit:4547 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4648 */
+  /* parser/parser.nit:4548 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4649 */
+  /* parser/parser.nit:4549 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4651 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4551 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4651);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4551);
   }
-  /* ./parser//parser.nit:4653 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4553 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4653);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4553);
   }
-  /* ./parser//parser.nit:4655 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4555 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4655);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4555);
   }
-  /* ./parser//parser.nit:4657 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4557 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4657);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4557);
   }
-  /* ./parser//parser.nit:4659 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4559 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4559);
   }
-  /* ./parser//parser.nit:4661 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4561 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4561);
   }
-  /* ./parser//parser.nit:4663 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4563 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4563);
   }
-  /* ./parser//parser.nit:4664 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4676 */
+  /* parser/parser.nit:4564 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4576 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4677 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction104____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4577 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4677);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4577);
   }
-  REGB0 = ATTR_parser___ReduceAction104____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction104___init(val_t p0, val_t p1, int* init_table){
-  int itpos107 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction104].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos107]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4680;
-  fra.me.meth = LOCATE_parser___ReduceAction104___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4680 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction104____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos107] = 1;
-  return;
-}
-void parser___ReduceAction105___action(val_t p0, val_t p1){
+void parser___ReduceAction106___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4684;
-  fra.me.meth = LOCATE_parser___ReduceAction105___action;
+  fra.me.line = 4582;
+  fra.me.meth = LOCATE_parser___ReduceAction106___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16349,110 +14452,87 @@ void parser___ReduceAction105___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4686 */
+  /* parser/parser.nit:4584 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4687 */
+  /* parser/parser.nit:4585 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4688 */
+  /* parser/parser.nit:4586 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4689 */
+  /* parser/parser.nit:4587 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4690 */
+  /* parser/parser.nit:4588 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4691 */
+  /* parser/parser.nit:4589 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4692 */
+  /* parser/parser.nit:4590 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4693 */
+  /* parser/parser.nit:4591 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4694 */
+  /* parser/parser.nit:4592 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4696 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4594 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4696);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4594);
   }
-  /* ./parser//parser.nit:4698 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4596 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4698);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4596);
   }
-  /* ./parser//parser.nit:4700 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4598 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4598);
   }
-  /* ./parser//parser.nit:4702 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4600 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4702);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4600);
   }
-  /* ./parser//parser.nit:4704 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4602 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4704);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4602);
   }
-  /* ./parser//parser.nit:4706 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4604 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4706);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4604);
   }
-  /* ./parser//parser.nit:4707 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4719 */
+  /* parser/parser.nit:4605 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4617 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4720 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction105____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4618 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4720);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4618);
   }
-  REGB0 = ATTR_parser___ReduceAction105____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction105___init(val_t p0, val_t p1, int* init_table){
-  int itpos108 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction105].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;
-  fra.me.line = 4723;
-  fra.me.meth = LOCATE_parser___ReduceAction105___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4723 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction105____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos108] = 1;
-  return;
-}
-void parser___ReduceAction106___action(val_t p0, val_t p1){
+void parser___ReduceAction107___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4727;
-  fra.me.meth = LOCATE_parser___ReduceAction106___action;
+  fra.me.line = 4623;
+  fra.me.meth = LOCATE_parser___ReduceAction107___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16465,118 +14545,95 @@ void parser___ReduceAction106___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4729 */
+  /* parser/parser.nit:4625 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4730 */
+  /* parser/parser.nit:4626 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4731 */
+  /* parser/parser.nit:4627 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4732 */
+  /* parser/parser.nit:4628 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4733 */
+  /* parser/parser.nit:4629 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4734 */
+  /* parser/parser.nit:4630 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4735 */
+  /* parser/parser.nit:4631 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4736 */
+  /* parser/parser.nit:4632 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4737 */
+  /* parser/parser.nit:4633 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4738 */
+  /* parser/parser.nit:4634 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4740 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4636 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4740);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4636);
   }
-  /* ./parser//parser.nit:4742 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4638 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4742);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4638);
   }
-  /* ./parser//parser.nit:4744 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4640 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4744);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4640);
   }
-  /* ./parser//parser.nit:4746 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4642 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4746);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4642);
   }
-  /* ./parser//parser.nit:4748 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4644 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4644);
   }
-  /* ./parser//parser.nit:4750 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4646 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4646);
   }
-  /* ./parser//parser.nit:4752 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4648 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4648);
   }
-  /* ./parser//parser.nit:4753 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4765 */
+  /* parser/parser.nit:4649 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4661 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4766 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction106____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4662 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4766);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4662);
   }
-  REGB0 = ATTR_parser___ReduceAction106____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction106___init(val_t p0, val_t p1, int* init_table){
-  int itpos109 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction106].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos109]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4769;
-  fra.me.meth = LOCATE_parser___ReduceAction106___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4769 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction106____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos109] = 1;
-  return;
-}
-void parser___ReduceAction107___action(val_t p0, val_t p1){
+void parser___ReduceAction108___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4773;
-  fra.me.meth = LOCATE_parser___ReduceAction107___action;
+  fra.me.line = 4667;
+  fra.me.meth = LOCATE_parser___ReduceAction108___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16589,118 +14646,95 @@ void parser___ReduceAction107___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4775 */
+  /* parser/parser.nit:4669 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4776 */
+  /* parser/parser.nit:4670 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4777 */
+  /* parser/parser.nit:4671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4778 */
+  /* parser/parser.nit:4672 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4779 */
+  /* parser/parser.nit:4673 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4780 */
+  /* parser/parser.nit:4674 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4781 */
+  /* parser/parser.nit:4675 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4782 */
+  /* parser/parser.nit:4676 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4783 */
+  /* parser/parser.nit:4677 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4784 */
+  /* parser/parser.nit:4678 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4786 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4680 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4786);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4680);
   }
-  /* ./parser//parser.nit:4788 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4682 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4788);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4682);
   }
-  /* ./parser//parser.nit:4790 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4684 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4790);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4684);
   }
-  /* ./parser//parser.nit:4792 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4686 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4686);
   }
-  /* ./parser//parser.nit:4794 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4688 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4688);
   }
-  /* ./parser//parser.nit:4796 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4690 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4690);
   }
-  /* ./parser//parser.nit:4798 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4692 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4692);
   }
-  /* ./parser//parser.nit:4799 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4811 */
+  /* parser/parser.nit:4693 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4705 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4812 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction107____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4706 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4812);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4706);
   }
-  REGB0 = ATTR_parser___ReduceAction107____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction107___init(val_t p0, val_t p1, int* init_table){
-  int itpos110 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction107].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos110]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4815;
-  fra.me.meth = LOCATE_parser___ReduceAction107___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4815 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction107____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos110] = 1;
-  return;
-}
-void parser___ReduceAction108___action(val_t p0, val_t p1){
+void parser___ReduceAction109___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4819;
-  fra.me.meth = LOCATE_parser___ReduceAction108___action;
+  fra.me.line = 4711;
+  fra.me.meth = LOCATE_parser___ReduceAction109___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16714,126 +14748,103 @@ void parser___ReduceAction108___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4821 */
+  /* parser/parser.nit:4713 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4822 */
+  /* parser/parser.nit:4714 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4823 */
+  /* parser/parser.nit:4715 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4824 */
+  /* parser/parser.nit:4716 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4825 */
+  /* parser/parser.nit:4717 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4826 */
+  /* parser/parser.nit:4718 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4827 */
+  /* parser/parser.nit:4719 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4828 */
+  /* parser/parser.nit:4720 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4829 */
+  /* parser/parser.nit:4721 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4830 */
+  /* parser/parser.nit:4722 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4831 */
+  /* parser/parser.nit:4723 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4833 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4725 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4725);
   }
-  /* ./parser//parser.nit:4835 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4727 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4835);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4727);
   }
-  /* ./parser//parser.nit:4837 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4729 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4837);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4729);
   }
-  /* ./parser//parser.nit:4839 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4731 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4839);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4731);
   }
-  /* ./parser//parser.nit:4841 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4733 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4841);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4733);
   }
-  /* ./parser//parser.nit:4843 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4735 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4843);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4735);
   }
-  /* ./parser//parser.nit:4845 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4737 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4845);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4737);
   }
-  /* ./parser//parser.nit:4847 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4739 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4739);
   }
-  /* ./parser//parser.nit:4848 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:4860 */
+  /* parser/parser.nit:4740 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:4752 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4861 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction108____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4753 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4861);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4753);
   }
-  REGB0 = ATTR_parser___ReduceAction108____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction108___init(val_t p0, val_t p1, int* init_table){
-  int itpos111 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction108].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos111]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4864;
-  fra.me.meth = LOCATE_parser___ReduceAction108___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4864 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction108____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos111] = 1;
-  return;
-}
-void parser___ReduceAction109___action(val_t p0, val_t p1){
+void parser___ReduceAction110___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4868;
-  fra.me.meth = LOCATE_parser___ReduceAction109___action;
+  fra.me.line = 4758;
+  fra.me.meth = LOCATE_parser___ReduceAction110___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16845,110 +14856,87 @@ void parser___ReduceAction109___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4870 */
+  /* parser/parser.nit:4760 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4871 */
+  /* parser/parser.nit:4761 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4872 */
+  /* parser/parser.nit:4762 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4873 */
+  /* parser/parser.nit:4763 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4874 */
+  /* parser/parser.nit:4764 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4875 */
+  /* parser/parser.nit:4765 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4876 */
+  /* parser/parser.nit:4766 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4877 */
+  /* parser/parser.nit:4767 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4878 */
+  /* parser/parser.nit:4768 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4880 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4770 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4880);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4770);
   }
-  /* ./parser//parser.nit:4882 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4772 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4882);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4772);
   }
-  /* ./parser//parser.nit:4884 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4774 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4884);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4774);
   }
-  /* ./parser//parser.nit:4886 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4776 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4886);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4776);
   }
-  /* ./parser//parser.nit:4888 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4778 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4888);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4778);
   }
-  /* ./parser//parser.nit:4890 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4780 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4890);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4780);
   }
-  /* ./parser//parser.nit:4891 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4903 */
+  /* parser/parser.nit:4781 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:4793 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4904 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction109____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4794 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4904);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4794);
   }
-  REGB0 = ATTR_parser___ReduceAction109____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction109___init(val_t p0, val_t p1, int* init_table){
-  int itpos112 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction109].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos112]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4907;
-  fra.me.meth = LOCATE_parser___ReduceAction109___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4907 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction109____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos112] = 1;
-  return;
-}
-void parser___ReduceAction110___action(val_t p0, val_t p1){
+void parser___ReduceAction111___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4911;
-  fra.me.meth = LOCATE_parser___ReduceAction110___action;
+  fra.me.line = 4799;
+  fra.me.meth = LOCATE_parser___ReduceAction111___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -16961,118 +14949,95 @@ void parser___ReduceAction110___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4913 */
+  /* parser/parser.nit:4801 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4914 */
+  /* parser/parser.nit:4802 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4915 */
+  /* parser/parser.nit:4803 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4916 */
+  /* parser/parser.nit:4804 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4917 */
+  /* parser/parser.nit:4805 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4918 */
+  /* parser/parser.nit:4806 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4919 */
+  /* parser/parser.nit:4807 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4920 */
+  /* parser/parser.nit:4808 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4921 */
+  /* parser/parser.nit:4809 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4922 */
+  /* parser/parser.nit:4810 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4924 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4812 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4924);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4812);
   }
-  /* ./parser//parser.nit:4926 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4814 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4926);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4814);
   }
-  /* ./parser//parser.nit:4928 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4816 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4928);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4816);
   }
-  /* ./parser//parser.nit:4930 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4818 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4818);
   }
-  /* ./parser//parser.nit:4932 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4820 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4820);
   }
-  /* ./parser//parser.nit:4934 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4822 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4822);
   }
-  /* ./parser//parser.nit:4936 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4824 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4824);
   }
-  /* ./parser//parser.nit:4937 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4949 */
+  /* parser/parser.nit:4825 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:4837 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4950 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction110____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4838 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4838);
   }
-  REGB0 = ATTR_parser___ReduceAction110____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction110___init(val_t p0, val_t p1, int* init_table){
-  int itpos113 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction110].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos113]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4953;
-  fra.me.meth = LOCATE_parser___ReduceAction110___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4953 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction110____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos113] = 1;
-  return;
-}
-void parser___ReduceAction111___action(val_t p0, val_t p1){
+void parser___ReduceAction112___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 4957;
-  fra.me.meth = LOCATE_parser___ReduceAction111___action;
+  fra.me.line = 4843;
+  fra.me.meth = LOCATE_parser___ReduceAction112___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17085,118 +15050,95 @@ void parser___ReduceAction111___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:4959 */
+  /* parser/parser.nit:4845 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:4960 */
+  /* parser/parser.nit:4846 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4961 */
+  /* parser/parser.nit:4847 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4962 */
+  /* parser/parser.nit:4848 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4963 */
+  /* parser/parser.nit:4849 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4964 */
+  /* parser/parser.nit:4850 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4965 */
+  /* parser/parser.nit:4851 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4966 */
+  /* parser/parser.nit:4852 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4967 */
+  /* parser/parser.nit:4853 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4968 */
+  /* parser/parser.nit:4854 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:4970 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4856 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4856);
   }
-  /* ./parser//parser.nit:4972 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4858 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4858);
   }
-  /* ./parser//parser.nit:4974 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4860 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4974);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4860);
   }
-  /* ./parser//parser.nit:4976 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4862 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4976);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4862);
   }
-  /* ./parser//parser.nit:4978 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4864 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4978);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4864);
   }
-  /* ./parser//parser.nit:4980 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4866 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4980);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4866);
   }
-  /* ./parser//parser.nit:4982 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4868 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 4982);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4868);
   }
-  /* ./parser//parser.nit:4983 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:4995 */
+  /* parser/parser.nit:4869 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:4881 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:4996 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction111____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4882 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4996);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4882);
   }
-  REGB0 = ATTR_parser___ReduceAction111____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction111___init(val_t p0, val_t p1, int* init_table){
-  int itpos114 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction111].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos114]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 4999;
-  fra.me.meth = LOCATE_parser___ReduceAction111___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:4999 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction111____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos114] = 1;
-  return;
-}
-void parser___ReduceAction112___action(val_t p0, val_t p1){
+void parser___ReduceAction113___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5003;
-  fra.me.meth = LOCATE_parser___ReduceAction112___action;
+  fra.me.line = 4887;
+  fra.me.meth = LOCATE_parser___ReduceAction113___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17210,126 +15152,103 @@ void parser___ReduceAction112___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5005 */
+  /* parser/parser.nit:4889 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5006 */
+  /* parser/parser.nit:4890 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5007 */
+  /* parser/parser.nit:4891 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5008 */
+  /* parser/parser.nit:4892 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5009 */
+  /* parser/parser.nit:4893 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5010 */
+  /* parser/parser.nit:4894 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5011 */
+  /* parser/parser.nit:4895 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5012 */
+  /* parser/parser.nit:4896 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5013 */
+  /* parser/parser.nit:4897 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5014 */
+  /* parser/parser.nit:4898 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5015 */
+  /* parser/parser.nit:4899 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5017 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4901 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5017);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4901);
   }
-  /* ./parser//parser.nit:5019 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4903 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5019);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4903);
   }
-  /* ./parser//parser.nit:5021 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4905 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5021);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4905);
   }
-  /* ./parser//parser.nit:5023 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4907 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5023);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4907);
   }
-  /* ./parser//parser.nit:5025 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4909 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5025);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4909);
   }
-  /* ./parser//parser.nit:5027 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4911 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5027);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4911);
   }
-  /* ./parser//parser.nit:5029 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4913 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4913);
   }
-  /* ./parser//parser.nit:5031 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4915 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4915);
   }
-  /* ./parser//parser.nit:5032 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5044 */
+  /* parser/parser.nit:4916 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:4928 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5045 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction112____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4929 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5045);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4929);
   }
-  REGB0 = ATTR_parser___ReduceAction112____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction112___init(val_t p0, val_t p1, int* init_table){
-  int itpos115 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction112].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos115]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5048;
-  fra.me.meth = LOCATE_parser___ReduceAction112___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5048 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction112____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos115] = 1;
-  return;
-}
-void parser___ReduceAction113___action(val_t p0, val_t p1){
+void parser___ReduceAction114___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5052;
-  fra.me.meth = LOCATE_parser___ReduceAction113___action;
+  fra.me.line = 4934;
+  fra.me.meth = LOCATE_parser___ReduceAction114___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17342,118 +15261,95 @@ void parser___ReduceAction113___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5054 */
+  /* parser/parser.nit:4936 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5055 */
+  /* parser/parser.nit:4937 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5056 */
+  /* parser/parser.nit:4938 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5057 */
+  /* parser/parser.nit:4939 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5058 */
+  /* parser/parser.nit:4940 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5059 */
+  /* parser/parser.nit:4941 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5060 */
+  /* parser/parser.nit:4942 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5061 */
+  /* parser/parser.nit:4943 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5062 */
+  /* parser/parser.nit:4944 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5063 */
+  /* parser/parser.nit:4945 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5065 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4947 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5065);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4947);
   }
-  /* ./parser//parser.nit:5067 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4949 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5067);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4949);
   }
-  /* ./parser//parser.nit:5069 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4951 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5069);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4951);
   }
-  /* ./parser//parser.nit:5071 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:4953 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5071);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4953);
   }
-  /* ./parser//parser.nit:5073 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:4955 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5073);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4955);
   }
-  /* ./parser//parser.nit:5075 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:4957 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5075);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4957);
   }
-  /* ./parser//parser.nit:5077 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:4959 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5077);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4959);
   }
-  /* ./parser//parser.nit:5078 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5090 */
+  /* parser/parser.nit:4960 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:4972 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5091 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction113____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:4973 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5091);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 4973);
   }
-  REGB0 = ATTR_parser___ReduceAction113____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction113___init(val_t p0, val_t p1, int* init_table){
-  int itpos116 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction113].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 5094;
-  fra.me.meth = LOCATE_parser___ReduceAction113___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5094 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction113____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos116] = 1;
-  return;
-}
-void parser___ReduceAction114___action(val_t p0, val_t p1){
+void parser___ReduceAction115___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5098;
-  fra.me.meth = LOCATE_parser___ReduceAction114___action;
+  fra.me.line = 4978;
+  fra.me.meth = LOCATE_parser___ReduceAction115___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17467,126 +15363,103 @@ void parser___ReduceAction114___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5100 */
+  /* parser/parser.nit:4980 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5101 */
+  /* parser/parser.nit:4981 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5102 */
+  /* parser/parser.nit:4982 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5103 */
+  /* parser/parser.nit:4983 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5104 */
+  /* parser/parser.nit:4984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5105 */
+  /* parser/parser.nit:4985 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5106 */
+  /* parser/parser.nit:4986 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5107 */
+  /* parser/parser.nit:4987 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5108 */
+  /* parser/parser.nit:4988 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5109 */
+  /* parser/parser.nit:4989 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5110 */
+  /* parser/parser.nit:4990 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5112 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:4992 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5112);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4992);
   }
-  /* ./parser//parser.nit:5114 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:4994 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5114);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4994);
   }
-  /* ./parser//parser.nit:5116 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:4996 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5116);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4996);
   }
-  /* ./parser//parser.nit:5118 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:4998 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 4998);
   }
-  /* ./parser//parser.nit:5120 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5000 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5000);
   }
-  /* ./parser//parser.nit:5122 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:5002 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5122);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5002);
   }
-  /* ./parser//parser.nit:5124 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5004 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5124);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5004);
   }
-  /* ./parser//parser.nit:5126 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5006 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5126);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5006);
   }
-  /* ./parser//parser.nit:5127 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5139 */
+  /* parser/parser.nit:5007 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5019 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5140 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction114____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5020 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5140);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5020);
   }
-  REGB0 = ATTR_parser___ReduceAction114____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction114___init(val_t p0, val_t p1, int* init_table){
-  int itpos117 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction114].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos117]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5143;
-  fra.me.meth = LOCATE_parser___ReduceAction114___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5143 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction114____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos117] = 1;
-  return;
-}
-void parser___ReduceAction115___action(val_t p0, val_t p1){
+void parser___ReduceAction116___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5147;
-  fra.me.meth = LOCATE_parser___ReduceAction115___action;
+  fra.me.line = 5025;
+  fra.me.meth = LOCATE_parser___ReduceAction116___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17600,126 +15473,103 @@ void parser___ReduceAction115___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5149 */
+  /* parser/parser.nit:5027 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5150 */
+  /* parser/parser.nit:5028 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5151 */
+  /* parser/parser.nit:5029 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5152 */
+  /* parser/parser.nit:5030 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5153 */
+  /* parser/parser.nit:5031 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5154 */
+  /* parser/parser.nit:5032 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5155 */
+  /* parser/parser.nit:5033 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5156 */
+  /* parser/parser.nit:5034 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5157 */
+  /* parser/parser.nit:5035 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5158 */
+  /* parser/parser.nit:5036 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5159 */
+  /* parser/parser.nit:5037 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5161 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5039 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5161);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5039);
   }
-  /* ./parser//parser.nit:5163 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5041 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5163);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5041);
   }
-  /* ./parser//parser.nit:5165 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5043 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5043);
   }
-  /* ./parser//parser.nit:5167 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5045 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5045);
   }
-  /* ./parser//parser.nit:5169 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5047 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5047);
   }
-  /* ./parser//parser.nit:5171 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:5049 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5049);
   }
-  /* ./parser//parser.nit:5173 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5051 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5051);
   }
-  /* ./parser//parser.nit:5175 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5053 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5053);
   }
-  /* ./parser//parser.nit:5176 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5188 */
+  /* parser/parser.nit:5054 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5066 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5189 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction115____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5067 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5067);
   }
-  REGB0 = ATTR_parser___ReduceAction115____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction115___init(val_t p0, val_t p1, int* init_table){
-  int itpos118 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction115].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos118]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5192;
-  fra.me.meth = LOCATE_parser___ReduceAction115___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5192 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction115____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos118] = 1;
-  return;
-}
-void parser___ReduceAction116___action(val_t p0, val_t p1){
+void parser___ReduceAction117___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[11];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5196;
-  fra.me.meth = LOCATE_parser___ReduceAction116___action;
+  fra.me.line = 5072;
+  fra.me.meth = LOCATE_parser___ReduceAction117___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 12;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17734,134 +15584,111 @@ void parser___ReduceAction116___action(val_t p0, val_t p1){
   fra.me.REG[11] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5198 */
+  /* parser/parser.nit:5074 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5199 */
+  /* parser/parser.nit:5075 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5200 */
+  /* parser/parser.nit:5076 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5201 */
+  /* parser/parser.nit:5077 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5202 */
+  /* parser/parser.nit:5078 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5203 */
+  /* parser/parser.nit:5079 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5204 */
+  /* parser/parser.nit:5080 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5205 */
+  /* parser/parser.nit:5081 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5206 */
+  /* parser/parser.nit:5082 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5207 */
+  /* parser/parser.nit:5083 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5208 */
+  /* parser/parser.nit:5084 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5209 */
+  /* parser/parser.nit:5085 */
   fra.me.REG[11] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5211 */
-  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5087 */
+  REGB0 = TAG_Bool((fra.me.REG[11]==NIT_NULL) || VAL_ISA(fra.me.REG[11], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5211);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5087);
   }
-  /* ./parser//parser.nit:5213 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5089 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5089);
   }
-  /* ./parser//parser.nit:5215 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5091 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5091);
   }
-  /* ./parser//parser.nit:5217 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5093 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5093);
   }
-  /* ./parser//parser.nit:5219 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5095 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5095);
   }
-  /* ./parser//parser.nit:5221 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5097 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5221);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5097);
   }
-  /* ./parser//parser.nit:5223 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:5099 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5223);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5099);
   }
-  /* ./parser//parser.nit:5225 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5101 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5225);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5101);
   }
-  /* ./parser//parser.nit:5227 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5103 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5103);
   }
-  /* ./parser//parser.nit:5228 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5240 */
+  /* parser/parser.nit:5104 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[11], fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5116 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5241 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction116____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5117 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5241);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5117);
   }
-  REGB0 = ATTR_parser___ReduceAction116____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction116___init(val_t p0, val_t p1, int* init_table){
-  int itpos119 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction116].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos119]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5244;
-  fra.me.meth = LOCATE_parser___ReduceAction116___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5244 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction116____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos119] = 1;
-  return;
-}
-void parser___ReduceAction117___action(val_t p0, val_t p1){
+void parser___ReduceAction118___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5248;
-  fra.me.meth = LOCATE_parser___ReduceAction117___action;
+  fra.me.line = 5122;
+  fra.me.meth = LOCATE_parser___ReduceAction118___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17871,90 +15698,67 @@ void parser___ReduceAction117___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5250 */
+  /* parser/parser.nit:5124 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5251 */
+  /* parser/parser.nit:5125 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5252 */
+  /* parser/parser.nit:5126 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5253 */
+  /* parser/parser.nit:5127 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5254 */
+  /* parser/parser.nit:5128 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5256 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5130 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5256);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5130);
   }
-  /* ./parser//parser.nit:5258 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5132 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5258);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5132);
   }
-  /* ./parser//parser.nit:5260 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5134 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5260);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5134);
   }
-  /* ./parser//parser.nit:5262 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5136 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5136);
   }
-  /* ./parser//parser.nit:5263 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5275 */
+  /* parser/parser.nit:5137 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[6], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:5149 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5276 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction117____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5150 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5276);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5150);
   }
-  REGB0 = ATTR_parser___ReduceAction117____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction117___init(val_t p0, val_t p1, int* init_table){
-  int itpos120 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction117].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction119___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos120]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5279;
-  fra.me.meth = LOCATE_parser___ReduceAction117___init;
+  fra.me.line = 5155;
+  fra.me.meth = LOCATE_parser___ReduceAction119___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5279 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction117____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos120] = 1;
-  return;
-}
-void parser___ReduceAction118___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5283;
-  fra.me.meth = LOCATE_parser___ReduceAction118___action;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -17965,98 +15769,75 @@ void parser___ReduceAction118___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5285 */
+  /* parser/parser.nit:5157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5286 */
+  /* parser/parser.nit:5158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5287 */
+  /* parser/parser.nit:5159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5288 */
+  /* parser/parser.nit:5160 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5289 */
+  /* parser/parser.nit:5161 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5290 */
+  /* parser/parser.nit:5162 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5292 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5164 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5292);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5164);
   }
-  /* ./parser//parser.nit:5294 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5166 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5294);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5166);
   }
-  /* ./parser//parser.nit:5296 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5168 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5296);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5168);
   }
-  /* ./parser//parser.nit:5298 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5170 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5298);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5170);
   }
-  /* ./parser//parser.nit:5300 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5172 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5300);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5172);
   }
-  /* ./parser//parser.nit:5301 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5313 */
+  /* parser/parser.nit:5173 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:5185 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5314 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction118____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5186 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5314);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5186);
   }
-  REGB0 = ATTR_parser___ReduceAction118____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction118___init(val_t p0, val_t p1, int* init_table){
-  int itpos121 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction118].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos121]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5317;
-  fra.me.meth = LOCATE_parser___ReduceAction118___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5317 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction118____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos121] = 1;
-  return;
-}
-void parser___ReduceAction119___action(val_t p0, val_t p1){
+void parser___ReduceAction120___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5321;
-  fra.me.meth = LOCATE_parser___ReduceAction119___action;
+  fra.me.line = 5191;
+  fra.me.meth = LOCATE_parser___ReduceAction120___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18067,98 +15848,75 @@ void parser___ReduceAction119___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5323 */
+  /* parser/parser.nit:5193 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5324 */
+  /* parser/parser.nit:5194 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5325 */
+  /* parser/parser.nit:5195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5326 */
+  /* parser/parser.nit:5196 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5327 */
+  /* parser/parser.nit:5197 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5328 */
+  /* parser/parser.nit:5198 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5330 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5200 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5200);
   }
-  /* ./parser//parser.nit:5332 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5202 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5332);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5202);
   }
-  /* ./parser//parser.nit:5334 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5204 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5334);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5204);
   }
-  /* ./parser//parser.nit:5336 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5206 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5336);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5206);
   }
-  /* ./parser//parser.nit:5338 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5208 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5338);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5208);
   }
-  /* ./parser//parser.nit:5339 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:5351 */
+  /* parser/parser.nit:5209 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:5221 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5352 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction119____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5222 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5352);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5222);
   }
-  REGB0 = ATTR_parser___ReduceAction119____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction119___init(val_t p0, val_t p1, int* init_table){
-  int itpos122 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction119].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos122]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5355;
-  fra.me.meth = LOCATE_parser___ReduceAction119___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5355 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction119____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos122] = 1;
-  return;
-}
-void parser___ReduceAction120___action(val_t p0, val_t p1){
+void parser___ReduceAction121___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5359;
-  fra.me.meth = LOCATE_parser___ReduceAction120___action;
+  fra.me.line = 5227;
+  fra.me.meth = LOCATE_parser___ReduceAction121___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18170,106 +15928,83 @@ void parser___ReduceAction120___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5361 */
+  /* parser/parser.nit:5229 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5362 */
+  /* parser/parser.nit:5230 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5363 */
+  /* parser/parser.nit:5231 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5364 */
+  /* parser/parser.nit:5232 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5365 */
+  /* parser/parser.nit:5233 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5366 */
+  /* parser/parser.nit:5234 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5367 */
+  /* parser/parser.nit:5235 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5369 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5237 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5369);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5237);
   }
-  /* ./parser//parser.nit:5371 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5239 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5239);
   }
-  /* ./parser//parser.nit:5373 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5241 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5241);
   }
-  /* ./parser//parser.nit:5375 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5243 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5375);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5243);
   }
-  /* ./parser//parser.nit:5377 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5245 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5377);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5245);
   }
-  /* ./parser//parser.nit:5379 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5247 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5379);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5247);
   }
-  /* ./parser//parser.nit:5380 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:5392 */
+  /* parser/parser.nit:5248 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:5260 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5393 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction120____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5261 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5261);
   }
-  REGB0 = ATTR_parser___ReduceAction120____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction120___init(val_t p0, val_t p1, int* init_table){
-  int itpos123 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction120].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos123]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5396;
-  fra.me.meth = LOCATE_parser___ReduceAction120___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5396 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction120____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos123] = 1;
-  return;
-}
-void parser___ReduceAction121___action(val_t p0, val_t p1){
+void parser___ReduceAction122___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5400;
-  fra.me.meth = LOCATE_parser___ReduceAction121___action;
+  fra.me.line = 5266;
+  fra.me.meth = LOCATE_parser___ReduceAction122___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18280,98 +16015,75 @@ void parser___ReduceAction121___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5402 */
+  /* parser/parser.nit:5268 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5403 */
+  /* parser/parser.nit:5269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5404 */
+  /* parser/parser.nit:5270 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5405 */
+  /* parser/parser.nit:5271 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5406 */
+  /* parser/parser.nit:5272 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5407 */
+  /* parser/parser.nit:5273 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5409 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5275 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5275);
   }
-  /* ./parser//parser.nit:5411 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5277 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5277);
   }
-  /* ./parser//parser.nit:5413 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5279 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5413);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5279);
   }
-  /* ./parser//parser.nit:5415 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5281 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5415);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5281);
   }
-  /* ./parser//parser.nit:5417 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5283 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5417);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5283);
   }
-  /* ./parser//parser.nit:5418 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5430 */
+  /* parser/parser.nit:5284 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:5296 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5431 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction121____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5297 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5431);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5297);
   }
-  REGB0 = ATTR_parser___ReduceAction121____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction121___init(val_t p0, val_t p1, int* init_table){
-  int itpos124 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction121].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos124]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5434;
-  fra.me.meth = LOCATE_parser___ReduceAction121___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5434 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction121____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos124] = 1;
-  return;
-}
-void parser___ReduceAction122___action(val_t p0, val_t p1){
+void parser___ReduceAction123___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5438;
-  fra.me.meth = LOCATE_parser___ReduceAction122___action;
+  fra.me.line = 5302;
+  fra.me.meth = LOCATE_parser___ReduceAction123___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18383,106 +16095,83 @@ void parser___ReduceAction122___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5440 */
+  /* parser/parser.nit:5304 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5441 */
+  /* parser/parser.nit:5305 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5442 */
+  /* parser/parser.nit:5306 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5443 */
+  /* parser/parser.nit:5307 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5444 */
+  /* parser/parser.nit:5308 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5445 */
+  /* parser/parser.nit:5309 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5446 */
+  /* parser/parser.nit:5310 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5448 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5312 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5448);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5312);
   }
-  /* ./parser//parser.nit:5450 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5314 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5450);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5314);
   }
-  /* ./parser//parser.nit:5452 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5316 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5452);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5316);
   }
-  /* ./parser//parser.nit:5454 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5318 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5454);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5318);
   }
-  /* ./parser//parser.nit:5456 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5320 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5456);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5320);
   }
-  /* ./parser//parser.nit:5458 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5322 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5458);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5322);
   }
-  /* ./parser//parser.nit:5459 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:5471 */
+  /* parser/parser.nit:5323 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:5335 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5472 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction122____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5336 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5472);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5336);
   }
-  REGB0 = ATTR_parser___ReduceAction122____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction122___init(val_t p0, val_t p1, int* init_table){
-  int itpos125 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction122].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos125]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5475;
-  fra.me.meth = LOCATE_parser___ReduceAction122___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5475 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction122____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos125] = 1;
-  return;
-}
-void parser___ReduceAction123___action(val_t p0, val_t p1){
+void parser___ReduceAction124___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5479;
-  fra.me.meth = LOCATE_parser___ReduceAction123___action;
+  fra.me.line = 5341;
+  fra.me.meth = LOCATE_parser___ReduceAction124___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18494,106 +16183,83 @@ void parser___ReduceAction123___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5481 */
+  /* parser/parser.nit:5343 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5482 */
+  /* parser/parser.nit:5344 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5483 */
+  /* parser/parser.nit:5345 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5484 */
+  /* parser/parser.nit:5346 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5485 */
+  /* parser/parser.nit:5347 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5486 */
+  /* parser/parser.nit:5348 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5487 */
+  /* parser/parser.nit:5349 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5489 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5351 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5351);
   }
-  /* ./parser//parser.nit:5491 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5353 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5353);
   }
-  /* ./parser//parser.nit:5493 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5355 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5355);
   }
-  /* ./parser//parser.nit:5495 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5357 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5357);
   }
-  /* ./parser//parser.nit:5497 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5359 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5359);
   }
-  /* ./parser//parser.nit:5499 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5361 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5499);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5361);
   }
-  /* ./parser//parser.nit:5500 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5512 */
+  /* parser/parser.nit:5362 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[3], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:5374 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5513 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction123____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5375 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5513);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5375);
   }
-  REGB0 = ATTR_parser___ReduceAction123____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction123___init(val_t p0, val_t p1, int* init_table){
-  int itpos126 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction123].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos126]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5516;
-  fra.me.meth = LOCATE_parser___ReduceAction123___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5516 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction123____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos126] = 1;
-  return;
-}
-void parser___ReduceAction124___action(val_t p0, val_t p1){
+void parser___ReduceAction125___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5520;
-  fra.me.meth = LOCATE_parser___ReduceAction124___action;
+  fra.me.line = 5380;
+  fra.me.meth = LOCATE_parser___ReduceAction125___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18606,114 +16272,91 @@ void parser___ReduceAction124___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5522 */
+  /* parser/parser.nit:5382 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5523 */
+  /* parser/parser.nit:5383 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5524 */
+  /* parser/parser.nit:5384 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5525 */
+  /* parser/parser.nit:5385 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5526 */
+  /* parser/parser.nit:5386 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5527 */
+  /* parser/parser.nit:5387 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5528 */
+  /* parser/parser.nit:5388 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5529 */
+  /* parser/parser.nit:5389 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5531 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5391 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5531);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5391);
   }
-  /* ./parser//parser.nit:5533 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5393 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5533);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5393);
   }
-  /* ./parser//parser.nit:5535 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5395 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5535);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5395);
   }
-  /* ./parser//parser.nit:5537 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5397 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5537);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5397);
   }
-  /* ./parser//parser.nit:5539 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5399 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5539);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5399);
   }
-  /* ./parser//parser.nit:5541 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5401 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5541);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5401);
   }
-  /* ./parser//parser.nit:5543 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5403 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5543);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5403);
   }
-  /* ./parser//parser.nit:5544 */
-  fra.me.REG[4] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:5556 */
+  /* parser/parser.nit:5404 */
+  fra.me.REG[4] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[3], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:5416 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:5557 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction124____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5417 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5557);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5417);
   }
-  REGB0 = ATTR_parser___ReduceAction124____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction124___init(val_t p0, val_t p1, int* init_table){
-  int itpos127 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction124].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos127]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5560;
-  fra.me.meth = LOCATE_parser___ReduceAction124___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5560 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction124____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos127] = 1;
-  return;
-}
-void parser___ReduceAction125___action(val_t p0, val_t p1){
+void parser___ReduceAction126___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5564;
-  fra.me.meth = LOCATE_parser___ReduceAction125___action;
+  fra.me.line = 5422;
+  fra.me.meth = LOCATE_parser___ReduceAction126___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18724,102 +16367,79 @@ void parser___ReduceAction125___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5566 */
+  /* parser/parser.nit:5424 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5567 */
+  /* parser/parser.nit:5425 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5568 */
+  /* parser/parser.nit:5426 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5569 */
+  /* parser/parser.nit:5427 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5570 */
+  /* parser/parser.nit:5428 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5571 */
+  /* parser/parser.nit:5429 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5572 */
+  /* parser/parser.nit:5430 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5573 */
+  /* parser/parser.nit:5431 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5575 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5433 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5575);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5433);
   }
-  /* ./parser//parser.nit:5577 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5435 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5435);
   }
-  /* ./parser//parser.nit:5579 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5437 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5437);
   }
-  /* ./parser//parser.nit:5581 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5439 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5439);
   }
-  /* ./parser//parser.nit:5583 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5441 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5441);
   }
-  /* ./parser//parser.nit:5584 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5596 */
+  /* parser/parser.nit:5442 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[7], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:5454 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5597 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction125____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5455 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5597);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5455);
   }
-  REGB0 = ATTR_parser___ReduceAction125____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction125___init(val_t p0, val_t p1, int* init_table){
-  int itpos128 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction125].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;
-  fra.me.line = 5600;
-  fra.me.meth = LOCATE_parser___ReduceAction125___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5600 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction125____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos128] = 1;
-  return;
-}
-void parser___ReduceAction126___action(val_t p0, val_t p1){
+void parser___ReduceAction127___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5604;
-  fra.me.meth = LOCATE_parser___ReduceAction126___action;
+  fra.me.line = 5460;
+  fra.me.meth = LOCATE_parser___ReduceAction127___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18831,110 +16451,87 @@ void parser___ReduceAction126___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5606 */
+  /* parser/parser.nit:5462 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5607 */
+  /* parser/parser.nit:5463 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5608 */
+  /* parser/parser.nit:5464 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5609 */
+  /* parser/parser.nit:5465 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5610 */
+  /* parser/parser.nit:5466 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5611 */
+  /* parser/parser.nit:5467 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5612 */
+  /* parser/parser.nit:5468 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5613 */
+  /* parser/parser.nit:5469 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5614 */
+  /* parser/parser.nit:5470 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5616 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5472 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5616);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5472);
   }
-  /* ./parser//parser.nit:5618 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5474 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5618);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5474);
   }
-  /* ./parser//parser.nit:5620 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5476 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5476);
   }
-  /* ./parser//parser.nit:5622 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5478 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5622);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5478);
   }
-  /* ./parser//parser.nit:5624 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5480 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5480);
   }
-  /* ./parser//parser.nit:5626 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5482 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5626);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5482);
   }
-  /* ./parser//parser.nit:5627 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5639 */
+  /* parser/parser.nit:5483 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:5495 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5640 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction126____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5496 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5640);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5496);
   }
-  REGB0 = ATTR_parser___ReduceAction126____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction126___init(val_t p0, val_t p1, int* init_table){
-  int itpos129 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction126].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos129]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5643;
-  fra.me.meth = LOCATE_parser___ReduceAction126___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5643 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction126____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos129] = 1;
-  return;
-}
-void parser___ReduceAction127___action(val_t p0, val_t p1){
+void parser___ReduceAction128___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5647;
-  fra.me.meth = LOCATE_parser___ReduceAction127___action;
+  fra.me.line = 5501;
+  fra.me.meth = LOCATE_parser___ReduceAction128___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -18946,110 +16543,87 @@ void parser___ReduceAction127___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5649 */
+  /* parser/parser.nit:5503 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5650 */
+  /* parser/parser.nit:5504 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5651 */
+  /* parser/parser.nit:5505 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5652 */
+  /* parser/parser.nit:5506 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5653 */
+  /* parser/parser.nit:5507 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5654 */
+  /* parser/parser.nit:5508 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5655 */
+  /* parser/parser.nit:5509 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5656 */
+  /* parser/parser.nit:5510 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5657 */
+  /* parser/parser.nit:5511 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5659 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5513 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5513);
   }
-  /* ./parser//parser.nit:5661 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5515 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5661);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5515);
   }
-  /* ./parser//parser.nit:5663 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5517 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5663);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5517);
   }
-  /* ./parser//parser.nit:5665 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5519 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5519);
   }
-  /* ./parser//parser.nit:5667 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5521 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5667);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5521);
   }
-  /* ./parser//parser.nit:5669 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5523 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5669);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5523);
   }
-  /* ./parser//parser.nit:5670 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5682 */
+  /* parser/parser.nit:5524 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, NIT_NULL, NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5536 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5683 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction127____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5537 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5683);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5537);
   }
-  REGB0 = ATTR_parser___ReduceAction127____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction127___init(val_t p0, val_t p1, int* init_table){
-  int itpos130 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction127].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos130]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5686;
-  fra.me.meth = LOCATE_parser___ReduceAction127___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5686 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction127____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos130] = 1;
-  return;
-}
-void parser___ReduceAction128___action(val_t p0, val_t p1){
+void parser___ReduceAction129___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5690;
-  fra.me.meth = LOCATE_parser___ReduceAction128___action;
+  fra.me.line = 5542;
+  fra.me.meth = LOCATE_parser___ReduceAction129___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19062,118 +16636,95 @@ void parser___ReduceAction128___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5692 */
+  /* parser/parser.nit:5544 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5693 */
+  /* parser/parser.nit:5545 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5694 */
+  /* parser/parser.nit:5546 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5695 */
+  /* parser/parser.nit:5547 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5696 */
+  /* parser/parser.nit:5548 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5697 */
+  /* parser/parser.nit:5549 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5698 */
+  /* parser/parser.nit:5550 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5699 */
+  /* parser/parser.nit:5551 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5700 */
+  /* parser/parser.nit:5552 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5701 */
+  /* parser/parser.nit:5553 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5703 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5555 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5555);
   }
-  /* ./parser//parser.nit:5705 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5557 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5557);
   }
-  /* ./parser//parser.nit:5707 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5559 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5707);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5559);
   }
-  /* ./parser//parser.nit:5709 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5561 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5709);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5561);
   }
-  /* ./parser//parser.nit:5711 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5563 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5711);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5563);
   }
-  /* ./parser//parser.nit:5713 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5565 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5713);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5565);
   }
-  /* ./parser//parser.nit:5715 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5567 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5715);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5567);
   }
-  /* ./parser//parser.nit:5716 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5728 */
+  /* parser/parser.nit:5568 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5580 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5729 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction128____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5581 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5729);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5581);
   }
-  REGB0 = ATTR_parser___ReduceAction128____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction128___init(val_t p0, val_t p1, int* init_table){
-  int itpos131 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction128].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos131]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5732;
-  fra.me.meth = LOCATE_parser___ReduceAction128___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5732 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction128____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos131] = 1;
-  return;
-}
-void parser___ReduceAction129___action(val_t p0, val_t p1){
+void parser___ReduceAction130___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5736;
-  fra.me.meth = LOCATE_parser___ReduceAction129___action;
+  fra.me.line = 5586;
+  fra.me.meth = LOCATE_parser___ReduceAction130___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19185,110 +16736,87 @@ void parser___ReduceAction129___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5738 */
+  /* parser/parser.nit:5588 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5739 */
+  /* parser/parser.nit:5589 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5740 */
+  /* parser/parser.nit:5590 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5741 */
+  /* parser/parser.nit:5591 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5742 */
+  /* parser/parser.nit:5592 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5743 */
+  /* parser/parser.nit:5593 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5744 */
+  /* parser/parser.nit:5594 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5745 */
+  /* parser/parser.nit:5595 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5746 */
+  /* parser/parser.nit:5596 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5748 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5598 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5598);
   }
-  /* ./parser//parser.nit:5750 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5600 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5600);
   }
-  /* ./parser//parser.nit:5752 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5602 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5752);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5602);
   }
-  /* ./parser//parser.nit:5754 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5604 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5754);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5604);
   }
-  /* ./parser//parser.nit:5756 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5606 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5756);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5606);
   }
-  /* ./parser//parser.nit:5758 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5608 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5758);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5608);
   }
-  /* ./parser//parser.nit:5759 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5771 */
+  /* parser/parser.nit:5609 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:5621 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5772 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction129____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5622 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5772);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5622);
   }
-  REGB0 = ATTR_parser___ReduceAction129____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction129___init(val_t p0, val_t p1, int* init_table){
-  int itpos132 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction129].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos132]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5775;
-  fra.me.meth = LOCATE_parser___ReduceAction129___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5775 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction129____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos132] = 1;
-  return;
-}
-void parser___ReduceAction130___action(val_t p0, val_t p1){
+void parser___ReduceAction131___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5779;
-  fra.me.meth = LOCATE_parser___ReduceAction130___action;
+  fra.me.line = 5627;
+  fra.me.meth = LOCATE_parser___ReduceAction131___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19301,118 +16829,95 @@ void parser___ReduceAction130___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5781 */
+  /* parser/parser.nit:5629 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5782 */
+  /* parser/parser.nit:5630 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5783 */
+  /* parser/parser.nit:5631 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5784 */
+  /* parser/parser.nit:5632 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5785 */
+  /* parser/parser.nit:5633 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5786 */
+  /* parser/parser.nit:5634 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5787 */
+  /* parser/parser.nit:5635 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5788 */
+  /* parser/parser.nit:5636 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5789 */
+  /* parser/parser.nit:5637 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5790 */
+  /* parser/parser.nit:5638 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5792 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5640 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5792);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5640);
   }
-  /* ./parser//parser.nit:5794 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5642 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5794);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5642);
   }
-  /* ./parser//parser.nit:5796 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5644 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5796);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5644);
   }
-  /* ./parser//parser.nit:5798 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5646 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5798);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5646);
   }
-  /* ./parser//parser.nit:5800 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5648 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5800);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5648);
   }
-  /* ./parser//parser.nit:5802 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5650 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5802);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5650);
   }
-  /* ./parser//parser.nit:5804 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5652 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5652);
   }
-  /* ./parser//parser.nit:5805 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:5817 */
+  /* parser/parser.nit:5653 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:5665 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5818 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction130____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5666 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5818);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5666);
   }
-  REGB0 = ATTR_parser___ReduceAction130____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction130___init(val_t p0, val_t p1, int* init_table){
-  int itpos133 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction130].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos133]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5821;
-  fra.me.meth = LOCATE_parser___ReduceAction130___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5821 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction130____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos133] = 1;
-  return;
-}
-void parser___ReduceAction131___action(val_t p0, val_t p1){
+void parser___ReduceAction132___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5825;
-  fra.me.meth = LOCATE_parser___ReduceAction131___action;
+  fra.me.line = 5671;
+  fra.me.meth = LOCATE_parser___ReduceAction132___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19425,118 +16930,95 @@ void parser___ReduceAction131___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5827 */
+  /* parser/parser.nit:5673 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5828 */
+  /* parser/parser.nit:5674 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5829 */
+  /* parser/parser.nit:5675 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5830 */
+  /* parser/parser.nit:5676 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5831 */
+  /* parser/parser.nit:5677 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5832 */
+  /* parser/parser.nit:5678 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5833 */
+  /* parser/parser.nit:5679 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5834 */
+  /* parser/parser.nit:5680 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5835 */
+  /* parser/parser.nit:5681 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5836 */
+  /* parser/parser.nit:5682 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5838 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5684 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5684);
   }
-  /* ./parser//parser.nit:5840 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5686 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5686);
   }
-  /* ./parser//parser.nit:5842 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5688 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5688);
   }
-  /* ./parser//parser.nit:5844 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5690 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5844);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5690);
   }
-  /* ./parser//parser.nit:5846 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5692 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5846);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5692);
   }
-  /* ./parser//parser.nit:5848 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5694 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5848);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5694);
   }
-  /* ./parser//parser.nit:5850 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5696 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5696);
   }
-  /* ./parser//parser.nit:5851 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:5863 */
+  /* parser/parser.nit:5697 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:5709 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5864 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction131____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5710 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5864);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5710);
   }
-  REGB0 = ATTR_parser___ReduceAction131____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction131___init(val_t p0, val_t p1, int* init_table){
-  int itpos134 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction131].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction133___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos134]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5867;
-  fra.me.meth = LOCATE_parser___ReduceAction131___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5867 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction131____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos134] = 1;
-  return;
-}
-void parser___ReduceAction132___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5871;
-  fra.me.meth = LOCATE_parser___ReduceAction132___action;
+  fra.me.line = 5715;
+  fra.me.meth = LOCATE_parser___ReduceAction133___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19550,126 +17032,103 @@ void parser___ReduceAction132___action(val_t p0, val_t p1){
   fra.me.REG[10] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5873 */
+  /* parser/parser.nit:5717 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5874 */
+  /* parser/parser.nit:5718 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5875 */
+  /* parser/parser.nit:5719 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5876 */
+  /* parser/parser.nit:5720 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5877 */
+  /* parser/parser.nit:5721 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5878 */
+  /* parser/parser.nit:5722 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5879 */
+  /* parser/parser.nit:5723 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5880 */
+  /* parser/parser.nit:5724 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5881 */
+  /* parser/parser.nit:5725 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5882 */
+  /* parser/parser.nit:5726 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5883 */
+  /* parser/parser.nit:5727 */
   fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5885 */
-  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5729 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5729);
   }
-  /* ./parser//parser.nit:5887 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAble, ID_AAble)) /*cast nullable AAble*/;
+  /* parser/parser.nit:5731 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAble, ID_parser___parser_nodes___AAble)) /*cast nullable AAble*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5731);
   }
-  /* ./parser//parser.nit:5889 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5733 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5733);
   }
-  /* ./parser//parser.nit:5891 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5735 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5891);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5735);
   }
-  /* ./parser//parser.nit:5893 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:5737 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5737);
   }
-  /* ./parser//parser.nit:5895 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:5739 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5739);
   }
-  /* ./parser//parser.nit:5897 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:5741 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5897);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5741);
   }
-  /* ./parser//parser.nit:5899 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5743 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5899);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5743);
   }
-  /* ./parser//parser.nit:5900 */
-  fra.me.REG[3] = NEW_AAttrPropdef_parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:5912 */
+  /* parser/parser.nit:5744 */
+  fra.me.REG[3] = NEW_AAttrPropdef_parser___parser_prod___AAttrPropdef___init_aattrpropdef(fra.me.REG[10], NIT_NULL, fra.me.REG[4], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:5756 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5913 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction132____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5757 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5913);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5757);
   }
-  REGB0 = ATTR_parser___ReduceAction132____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction132___init(val_t p0, val_t p1, int* init_table){
-  int itpos135 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction132].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos135]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5916;
-  fra.me.meth = LOCATE_parser___ReduceAction132___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5916 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction132____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos135] = 1;
-  return;
-}
-void parser___ReduceAction133___action(val_t p0, val_t p1){
+void parser___ReduceAction134___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5920;
-  fra.me.meth = LOCATE_parser___ReduceAction133___action;
+  fra.me.line = 5762;
+  fra.me.meth = LOCATE_parser___ReduceAction134___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19680,100 +17139,77 @@ void parser___ReduceAction133___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5922 */
+  /* parser/parser.nit:5764 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5923 */
+  /* parser/parser.nit:5765 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5924 */
+  /* parser/parser.nit:5766 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5925 */
+  /* parser/parser.nit:5767 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5926 */
+  /* parser/parser.nit:5768 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5927 */
+  /* parser/parser.nit:5769 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5928 */
+  /* parser/parser.nit:5770 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5930 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5772 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5930);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5772);
   }
-  /* ./parser//parser.nit:5932 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5774 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5774);
   }
-  /* ./parser//parser.nit:5934 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5776 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5776);
   }
-  /* ./parser//parser.nit:5936 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5778 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5778);
   }
-  /* ./parser//parser.nit:5938 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5780 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5938);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5780);
   }
-  /* ./parser//parser.nit:5939 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5948 */
+  /* parser/parser.nit:5781 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5790 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5949 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction133____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5791 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5949);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5791);
   }
-  REGB0 = ATTR_parser___ReduceAction133____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction133___init(val_t p0, val_t p1, int* init_table){
-  int itpos136 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction133].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos136]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5952;
-  fra.me.meth = LOCATE_parser___ReduceAction133___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5952 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction133____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos136] = 1;
-  return;
-}
-void parser___ReduceAction134___action(val_t p0, val_t p1){
+void parser___ReduceAction135___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5956;
-  fra.me.meth = LOCATE_parser___ReduceAction134___action;
+  fra.me.line = 5796;
+  fra.me.meth = LOCATE_parser___ReduceAction135___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19785,108 +17221,85 @@ void parser___ReduceAction134___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5958 */
+  /* parser/parser.nit:5798 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5959 */
+  /* parser/parser.nit:5799 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5960 */
+  /* parser/parser.nit:5800 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5961 */
+  /* parser/parser.nit:5801 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5962 */
+  /* parser/parser.nit:5802 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5963 */
+  /* parser/parser.nit:5803 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5964 */
+  /* parser/parser.nit:5804 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5965 */
+  /* parser/parser.nit:5805 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5967 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5807 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5967);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5807);
   }
-  /* ./parser//parser.nit:5969 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5809 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5969);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5809);
   }
-  /* ./parser//parser.nit:5971 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5811 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5971);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5811);
   }
-  /* ./parser//parser.nit:5973 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5813 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5973);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5813);
   }
-  /* ./parser//parser.nit:5975 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5815 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5975);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5815);
   }
-  /* ./parser//parser.nit:5977 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5817 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 5977);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5817);
   }
-  /* ./parser//parser.nit:5978 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:5987 */
+  /* parser/parser.nit:5818 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5827 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:5988 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction134____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5828 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5988);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5828);
   }
-  REGB0 = ATTR_parser___ReduceAction134____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction134___init(val_t p0, val_t p1, int* init_table){
-  int itpos137 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction134].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos137]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 5991;
-  fra.me.meth = LOCATE_parser___ReduceAction134___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:5991 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction134____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos137] = 1;
-  return;
-}
-void parser___ReduceAction135___action(val_t p0, val_t p1){
+void parser___ReduceAction136___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 5995;
-  fra.me.meth = LOCATE_parser___ReduceAction135___action;
+  fra.me.line = 5833;
+  fra.me.meth = LOCATE_parser___ReduceAction136___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -19898,108 +17311,85 @@ void parser___ReduceAction135___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:5997 */
+  /* parser/parser.nit:5835 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:5998 */
+  /* parser/parser.nit:5836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:5999 */
+  /* parser/parser.nit:5837 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6000 */
+  /* parser/parser.nit:5838 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6001 */
+  /* parser/parser.nit:5839 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6002 */
+  /* parser/parser.nit:5840 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6003 */
+  /* parser/parser.nit:5841 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6004 */
+  /* parser/parser.nit:5842 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6006 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5844 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6006);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5844);
   }
-  /* ./parser//parser.nit:6008 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5846 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6008);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5846);
   }
-  /* ./parser//parser.nit:6010 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5848 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6010);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5848);
   }
-  /* ./parser//parser.nit:6012 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:5850 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5850);
   }
-  /* ./parser//parser.nit:6014 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5852 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5852);
   }
-  /* ./parser//parser.nit:6016 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5854 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6016);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5854);
   }
-  /* ./parser//parser.nit:6017 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6026 */
+  /* parser/parser.nit:5855 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5864 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6027 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction135____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5865 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6027);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5865);
   }
-  REGB0 = ATTR_parser___ReduceAction135____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction135___init(val_t p0, val_t p1, int* init_table){
-  int itpos138 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction135].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos138]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6030;
-  fra.me.meth = LOCATE_parser___ReduceAction135___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6030 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction135____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos138] = 1;
-  return;
-}
-void parser___ReduceAction136___action(val_t p0, val_t p1){
+void parser___ReduceAction137___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6034;
-  fra.me.meth = LOCATE_parser___ReduceAction136___action;
+  fra.me.line = 5870;
+  fra.me.meth = LOCATE_parser___ReduceAction137___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20012,116 +17402,93 @@ void parser___ReduceAction136___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6036 */
+  /* parser/parser.nit:5872 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6037 */
+  /* parser/parser.nit:5873 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6038 */
+  /* parser/parser.nit:5874 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6039 */
+  /* parser/parser.nit:5875 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6040 */
+  /* parser/parser.nit:5876 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6041 */
+  /* parser/parser.nit:5877 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6042 */
+  /* parser/parser.nit:5878 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6043 */
+  /* parser/parser.nit:5879 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6044 */
+  /* parser/parser.nit:5880 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6046 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5882 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6046);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5882);
   }
-  /* ./parser//parser.nit:6048 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5884 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6048);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5884);
   }
-  /* ./parser//parser.nit:6050 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5886 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6050);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5886);
   }
-  /* ./parser//parser.nit:6052 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5888 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5888);
   }
-  /* ./parser//parser.nit:6054 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:5890 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5890);
   }
-  /* ./parser//parser.nit:6056 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5892 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5892);
   }
-  /* ./parser//parser.nit:6058 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5894 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5894);
   }
-  /* ./parser//parser.nit:6059 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6068 */
+  /* parser/parser.nit:5895 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5904 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6069 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction136____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5905 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5905);
   }
-  REGB0 = ATTR_parser___ReduceAction136____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction136___init(val_t p0, val_t p1, int* init_table){
-  int itpos139 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction136].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos139]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6072;
-  fra.me.meth = LOCATE_parser___ReduceAction136___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6072 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction136____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos139] = 1;
-  return;
-}
-void parser___ReduceAction137___action(val_t p0, val_t p1){
+void parser___ReduceAction138___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6076;
-  fra.me.meth = LOCATE_parser___ReduceAction137___action;
+  fra.me.line = 5910;
+  fra.me.meth = LOCATE_parser___ReduceAction138___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20132,102 +17499,79 @@ void parser___ReduceAction137___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6078 */
+  /* parser/parser.nit:5912 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6079 */
+  /* parser/parser.nit:5913 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6080 */
+  /* parser/parser.nit:5914 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6081 */
+  /* parser/parser.nit:5915 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6082 */
+  /* parser/parser.nit:5916 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6083 */
+  /* parser/parser.nit:5917 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6084 */
+  /* parser/parser.nit:5918 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6085 */
+  /* parser/parser.nit:5919 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6087 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5921 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5921);
   }
-  /* ./parser//parser.nit:6089 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5923 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6089);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5923);
   }
-  /* ./parser//parser.nit:6091 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5925 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6091);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5925);
   }
-  /* ./parser//parser.nit:6093 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5927 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6093);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5927);
   }
-  /* ./parser//parser.nit:6095 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5929 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6095);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5929);
   }
-  /* ./parser//parser.nit:6096 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6105 */
+  /* parser/parser.nit:5930 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5939 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6106 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction137____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5940 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6106);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5940);
   }
-  REGB0 = ATTR_parser___ReduceAction137____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction137___init(val_t p0, val_t p1, int* init_table){
-  int itpos140 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction137].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos140]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6109;
-  fra.me.meth = LOCATE_parser___ReduceAction137___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6109 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction137____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos140] = 1;
-  return;
-}
-void parser___ReduceAction138___action(val_t p0, val_t p1){
+void parser___ReduceAction139___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6113;
-  fra.me.meth = LOCATE_parser___ReduceAction138___action;
+  fra.me.line = 5945;
+  fra.me.meth = LOCATE_parser___ReduceAction139___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20239,110 +17583,87 @@ void parser___ReduceAction138___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6115 */
+  /* parser/parser.nit:5947 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6116 */
+  /* parser/parser.nit:5948 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6117 */
+  /* parser/parser.nit:5949 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6118 */
+  /* parser/parser.nit:5950 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6119 */
+  /* parser/parser.nit:5951 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6120 */
+  /* parser/parser.nit:5952 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6121 */
+  /* parser/parser.nit:5953 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6122 */
+  /* parser/parser.nit:5954 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6123 */
+  /* parser/parser.nit:5955 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6125 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5957 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6125);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5957);
   }
-  /* ./parser//parser.nit:6127 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:5959 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6127);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5959);
   }
-  /* ./parser//parser.nit:6129 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5961 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6129);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5961);
   }
-  /* ./parser//parser.nit:6131 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5963 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6131);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5963);
   }
-  /* ./parser//parser.nit:6133 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:5965 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6133);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5965);
   }
-  /* ./parser//parser.nit:6135 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:5967 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6135);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5967);
   }
-  /* ./parser//parser.nit:6136 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6145 */
+  /* parser/parser.nit:5968 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:5977 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6146 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction138____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:5978 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6146);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 5978);
   }
-  REGB0 = ATTR_parser___ReduceAction138____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction138___init(val_t p0, val_t p1, int* init_table){
-  int itpos141 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction138].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos141]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6149;
-  fra.me.meth = LOCATE_parser___ReduceAction138___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6149 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction138____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos141] = 1;
-  return;
-}
-void parser___ReduceAction139___action(val_t p0, val_t p1){
+void parser___ReduceAction140___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6153;
-  fra.me.meth = LOCATE_parser___ReduceAction139___action;
+  fra.me.line = 5983;
+  fra.me.meth = LOCATE_parser___ReduceAction140___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20354,110 +17675,87 @@ void parser___ReduceAction139___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6155 */
+  /* parser/parser.nit:5985 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6156 */
+  /* parser/parser.nit:5986 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6157 */
+  /* parser/parser.nit:5987 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6158 */
+  /* parser/parser.nit:5988 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6159 */
+  /* parser/parser.nit:5989 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6160 */
+  /* parser/parser.nit:5990 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6161 */
+  /* parser/parser.nit:5991 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6162 */
+  /* parser/parser.nit:5992 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6163 */
+  /* parser/parser.nit:5993 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6165 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:5995 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6165);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5995);
   }
-  /* ./parser//parser.nit:6167 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:5997 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5997);
   }
-  /* ./parser//parser.nit:6169 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:5999 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 5999);
   }
-  /* ./parser//parser.nit:6171 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:6001 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6171);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6001);
   }
-  /* ./parser//parser.nit:6173 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:6003 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6173);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6003);
   }
-  /* ./parser//parser.nit:6175 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:6005 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6175);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6005);
   }
-  /* ./parser//parser.nit:6176 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6185 */
+  /* parser/parser.nit:6006 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6015 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6186 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction139____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6016 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6186);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6016);
   }
-  REGB0 = ATTR_parser___ReduceAction139____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction139___init(val_t p0, val_t p1, int* init_table){
-  int itpos142 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction139].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos142]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6189;
-  fra.me.meth = LOCATE_parser___ReduceAction139___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6189 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction139____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos142] = 1;
-  return;
-}
-void parser___ReduceAction140___action(val_t p0, val_t p1){
+void parser___ReduceAction141___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6193;
-  fra.me.meth = LOCATE_parser___ReduceAction140___action;
+  fra.me.line = 6021;
+  fra.me.meth = LOCATE_parser___ReduceAction141___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20470,118 +17768,95 @@ void parser___ReduceAction140___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6195 */
+  /* parser/parser.nit:6023 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6196 */
+  /* parser/parser.nit:6024 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6197 */
+  /* parser/parser.nit:6025 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6198 */
+  /* parser/parser.nit:6026 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6199 */
+  /* parser/parser.nit:6027 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6200 */
+  /* parser/parser.nit:6028 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6201 */
+  /* parser/parser.nit:6029 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6202 */
+  /* parser/parser.nit:6030 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6203 */
+  /* parser/parser.nit:6031 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6204 */
+  /* parser/parser.nit:6032 */
   fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6206 */
-  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:6034 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6206);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6034);
   }
-  /* ./parser//parser.nit:6208 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:6036 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6208);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6036);
   }
-  /* ./parser//parser.nit:6210 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:6038 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6210);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6038);
   }
-  /* ./parser//parser.nit:6212 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:6040 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6212);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6040);
   }
-  /* ./parser//parser.nit:6214 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:6042 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6214);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6042);
   }
-  /* ./parser//parser.nit:6216 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:6044 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6216);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6044);
   }
-  /* ./parser//parser.nit:6218 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:6046 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6218);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6046);
   }
-  /* ./parser//parser.nit:6219 */
-  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6228 */
+  /* parser/parser.nit:6047 */
+  fra.me.REG[3] = NEW_AConcreteInitPropdef_parser___parser_prod___AConcreteInitPropdef___init_aconcreteinitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6056 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6229 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction140____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6057 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6229);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6057);
   }
-  REGB0 = ATTR_parser___ReduceAction140____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction140___init(val_t p0, val_t p1, int* init_table){
-  int itpos143 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction140].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos143]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6232;
-  fra.me.meth = LOCATE_parser___ReduceAction140___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6232 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction140____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos143] = 1;
-  return;
-}
-void parser___ReduceAction141___action(val_t p0, val_t p1){
+void parser___ReduceAction142___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6236;
-  fra.me.meth = LOCATE_parser___ReduceAction141___action;
+  fra.me.line = 6062;
+  fra.me.meth = LOCATE_parser___ReduceAction142___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20592,98 +17867,75 @@ void parser___ReduceAction141___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6238 */
+  /* parser/parser.nit:6064 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6239 */
+  /* parser/parser.nit:6065 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6240 */
+  /* parser/parser.nit:6066 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6241 */
+  /* parser/parser.nit:6067 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6242 */
+  /* parser/parser.nit:6068 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6243 */
+  /* parser/parser.nit:6069 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6245 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:6071 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6245);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6071);
   }
-  /* ./parser//parser.nit:6247 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:6073 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6247);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6073);
   }
-  /* ./parser//parser.nit:6249 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  /* parser/parser.nit:6075 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6249);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6075);
   }
-  /* ./parser//parser.nit:6251 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:6077 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6077);
   }
-  /* ./parser//parser.nit:6253 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:6079 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6079);
   }
-  /* ./parser//parser.nit:6254 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6262 */
+  /* parser/parser.nit:6080 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6088 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6263 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction141____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6089 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6263);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6089);
   }
-  REGB0 = ATTR_parser___ReduceAction141____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction141___init(val_t p0, val_t p1, int* init_table){
-  int itpos144 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction141].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos144]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6266;
-  fra.me.meth = LOCATE_parser___ReduceAction141___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6266 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction141____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos144] = 1;
-  return;
-}
-void parser___ReduceAction142___action(val_t p0, val_t p1){
+void parser___ReduceAction143___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6270;
-  fra.me.meth = LOCATE_parser___ReduceAction142___action;
+  fra.me.line = 6094;
+  fra.me.meth = LOCATE_parser___ReduceAction143___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -20695,313 +17947,1598 @@ void parser___ReduceAction142___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6272 */
+  /* parser/parser.nit:6096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6273 */
+  /* parser/parser.nit:6097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6274 */
+  /* parser/parser.nit:6098 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6275 */
+  /* parser/parser.nit:6099 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6276 */
+  /* parser/parser.nit:6100 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6277 */
+  /* parser/parser.nit:6101 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6278 */
+  /* parser/parser.nit:6102 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6280 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_ADoc, ID_ADoc)) /*cast nullable ADoc*/;
+  /* parser/parser.nit:6104 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6280);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6104);
   }
-  /* ./parser//parser.nit:6282 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:6106 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6106);
   }
-  /* ./parser//parser.nit:6284 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:6108 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6108);
   }
-  /* ./parser//parser.nit:6286 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwtype, ID_TKwtype)) /*cast nullable TKwtype*/;
+  /* parser/parser.nit:6110 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6286);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6110);
   }
-  /* ./parser//parser.nit:6288 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:6112 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6112);
   }
-  /* ./parser//parser.nit:6290 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:6114 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6290);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6114);
   }
-  /* ./parser//parser.nit:6291 */
-  fra.me.REG[3] = NEW_ATypePropdef_parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6299 */
+  /* parser/parser.nit:6115 */
+  fra.me.REG[3] = NEW_ATypePropdef_parser___parser_prod___ATypePropdef___init_atypepropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6123 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6300 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction142____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6124 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6124);
   }
-  REGB0 = ATTR_parser___ReduceAction142____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction142___init(val_t p0, val_t p1, int* init_table){
-  int itpos145 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction142].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos145]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6303;
-  fra.me.meth = LOCATE_parser___ReduceAction142___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6303 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction142____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos145] = 1;
-  return;
-}
-void parser___ReduceAction143___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction144___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6307;
-  fra.me.meth = LOCATE_parser___ReduceAction143___action;
+  fra.me.line = 6129;
+  fra.me.meth = LOCATE_parser___ReduceAction144___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6309 */
+  /* parser/parser.nit:6131 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6310 */
+  /* parser/parser.nit:6132 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6133 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6312 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
+  /* parser/parser.nit:6134 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6135 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6136 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6137 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6139 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6139);
+  }
+  /* parser/parser.nit:6141 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6141);
+  }
+  /* parser/parser.nit:6143 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6143);
   }
-  /* ./parser//parser.nit:6313 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6317 */
+  /* parser/parser.nit:6145 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6145);
+  }
+  /* parser/parser.nit:6146 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:6156 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6318 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction143____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6157 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6318);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6157);
   }
-  REGB0 = ATTR_parser___ReduceAction143____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction143___init(val_t p0, val_t p1, int* init_table){
-  int itpos146 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction143].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction145___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos146]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6321;
-  fra.me.meth = LOCATE_parser___ReduceAction143___init;
+  fra.me.line = 6162;
+  fra.me.meth = LOCATE_parser___ReduceAction145___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6164 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6165 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6166 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6167 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6168 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6169 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6170 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6171 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6173 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6173);
+  }
+  /* parser/parser.nit:6175 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6175);
+  }
+  /* parser/parser.nit:6177 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6177);
+  }
+  /* parser/parser.nit:6179 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6179);
+  }
+  /* parser/parser.nit:6181 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6181);
+  }
+  /* parser/parser.nit:6182 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:6192 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6193 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6193);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction146___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6198;
+  fra.me.meth = LOCATE_parser___ReduceAction146___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6200 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6201 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6202 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6203 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6204 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6205 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6206 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6207 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6209 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6209);
+  }
+  /* parser/parser.nit:6211 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6211);
+  }
+  /* parser/parser.nit:6213 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6213);
+  }
+  /* parser/parser.nit:6215 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6215);
+  }
+  /* parser/parser.nit:6217 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6217);
+  }
+  /* parser/parser.nit:6218 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:6228 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6229 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6229);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction147___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6234;
+  fra.me.meth = LOCATE_parser___ReduceAction147___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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.nit:6236 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6237 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6238 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6239 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6240 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6241 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6242 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6243 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6244 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6246 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6246);
+  }
+  /* parser/parser.nit:6248 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6248);
+  }
+  /* parser/parser.nit:6250 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6250);
+  }
+  /* parser/parser.nit:6252 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6252);
+  }
+  /* parser/parser.nit:6254 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6254);
+  }
+  /* parser/parser.nit:6256 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6256);
+  }
+  /* parser/parser.nit:6257 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:6267 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6268 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6268);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction148___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6273;
+  fra.me.meth = LOCATE_parser___ReduceAction148___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6275 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6276 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6277 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6278 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6279 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6280 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6281 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6282 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6284 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6284);
+  }
+  /* parser/parser.nit:6286 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6286);
+  }
+  /* parser/parser.nit:6288 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6288);
+  }
+  /* parser/parser.nit:6290 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6290);
+  }
+  /* parser/parser.nit:6292 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6292);
+  }
+  /* parser/parser.nit:6293 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:6303 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6304 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6304);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction149___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6309;
+  fra.me.meth = LOCATE_parser___ReduceAction149___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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.nit:6311 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6312 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6313 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6314 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6315 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6316 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6317 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6318 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6319 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6321 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6321);
+  }
+  /* parser/parser.nit:6323 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6323);
+  }
+  /* parser/parser.nit:6325 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6325);
+  }
+  /* parser/parser.nit:6327 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6327);
+  }
+  /* parser/parser.nit:6329 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6329);
+  }
+  /* parser/parser.nit:6331 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6331);
+  }
+  /* parser/parser.nit:6332 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:6342 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6343 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6343);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction150___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6348;
+  fra.me.meth = LOCATE_parser___ReduceAction150___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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.nit:6350 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6351 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6352 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6353 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6354 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6355 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6356 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6357 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6358 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6360 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6360);
+  }
+  /* parser/parser.nit:6362 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6362);
+  }
+  /* parser/parser.nit:6364 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6364);
+  }
+  /* parser/parser.nit:6366 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6366);
+  }
+  /* parser/parser.nit:6368 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6368);
+  }
+  /* parser/parser.nit:6370 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6370);
+  }
+  /* parser/parser.nit:6371 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:6381 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6382 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6382);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction151___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6387;
+  fra.me.meth = LOCATE_parser___ReduceAction151___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6389 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6390 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6391 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6392 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6393 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6394 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6395 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6396 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6397 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6398 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6400 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6400);
+  }
+  /* parser/parser.nit:6402 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6402);
+  }
+  /* parser/parser.nit:6404 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6404);
+  }
+  /* parser/parser.nit:6406 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6406);
+  }
+  /* parser/parser.nit:6408 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6408);
+  }
+  /* parser/parser.nit:6410 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6410);
+  }
+  /* parser/parser.nit:6412 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6412);
+  }
+  /* parser/parser.nit:6413 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:6423 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6424 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6424);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction152___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6429;
+  fra.me.meth = LOCATE_parser___ReduceAction152___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6431 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6432 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6433 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6434 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6435 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6436 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6437 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6438 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6440 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6440);
+  }
+  /* parser/parser.nit:6442 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6442);
+  }
+  /* parser/parser.nit:6444 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6444);
+  }
+  /* parser/parser.nit:6446 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6446);
+  }
+  /* parser/parser.nit:6448 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6448);
+  }
+  /* parser/parser.nit:6449 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[7], NIT_NULL, fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6459 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6460 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6460);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction153___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6465;
+  fra.me.meth = LOCATE_parser___ReduceAction153___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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.nit:6467 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6468 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6469 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6470 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6471 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6472 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6473 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6474 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6475 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6477 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6477);
+  }
+  /* parser/parser.nit:6479 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6479);
+  }
+  /* parser/parser.nit:6481 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6481);
+  }
+  /* parser/parser.nit:6483 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6483);
+  }
+  /* parser/parser.nit:6485 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6485);
+  }
+  /* parser/parser.nit:6487 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6487);
+  }
+  /* parser/parser.nit:6488 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6498 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6499 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6499);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction154___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6504;
+  fra.me.meth = LOCATE_parser___ReduceAction154___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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.nit:6506 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6507 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6508 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6509 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6510 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6511 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6512 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6513 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6514 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6516 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6516);
+  }
+  /* parser/parser.nit:6518 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6518);
+  }
+  /* parser/parser.nit:6520 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6520);
+  }
+  /* parser/parser.nit:6522 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6522);
+  }
+  /* parser/parser.nit:6524 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6524);
+  }
+  /* parser/parser.nit:6526 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6526);
+  }
+  /* parser/parser.nit:6527 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6537 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6538 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6538);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction155___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6543;
+  fra.me.meth = LOCATE_parser___ReduceAction155___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6545 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6546 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6547 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6548 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6549 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6550 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6551 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6552 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6553 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6554 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6556 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6556);
+  }
+  /* parser/parser.nit:6558 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6558);
+  }
+  /* parser/parser.nit:6560 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6560);
+  }
+  /* parser/parser.nit:6562 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6562);
+  }
+  /* parser/parser.nit:6564 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6564);
+  }
+  /* parser/parser.nit:6566 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6566);
+  }
+  /* parser/parser.nit:6568 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6568);
+  }
+  /* parser/parser.nit:6569 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6579 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6580 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6580);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction156___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6585;
+  fra.me.meth = LOCATE_parser___ReduceAction156___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6321 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction143____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6587 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6588 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6589 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6590 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6591 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6592 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6593 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6594 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6595 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6597 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6597);
+  }
+  /* parser/parser.nit:6599 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6599);
+  }
+  /* parser/parser.nit:6601 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6601);
+  }
+  /* parser/parser.nit:6603 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6603);
+  }
+  /* parser/parser.nit:6605 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6605);
+  }
+  /* parser/parser.nit:6607 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6607);
+  }
+  /* parser/parser.nit:6608 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[8], NIT_NULL, fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6618 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6619 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6619);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos146] = 1;
   return;
 }
-void parser___ReduceAction144___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction157___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6325;
-  fra.me.meth = LOCATE_parser___ReduceAction144___action;
+  fra.me.line = 6624;
+  fra.me.meth = LOCATE_parser___ReduceAction157___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6626 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6627 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6628 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6629 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6630 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6631 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6632 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6633 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6634 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6635 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6637 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6637);
+  }
+  /* parser/parser.nit:6639 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6639);
+  }
+  /* parser/parser.nit:6641 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6641);
+  }
+  /* parser/parser.nit:6643 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6643);
+  }
+  /* parser/parser.nit:6645 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6645);
+  }
+  /* parser/parser.nit:6647 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6647);
+  }
+  /* parser/parser.nit:6649 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6649);
+  }
+  /* parser/parser.nit:6650 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6660 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6661 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6661);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction158___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6666;
+  fra.me.meth = LOCATE_parser___ReduceAction158___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:6668 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:6669 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6670 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6671 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6672 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6673 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6674 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6675 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6676 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6677 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6679 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6679);
+  }
+  /* parser/parser.nit:6681 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6681);
+  }
+  /* parser/parser.nit:6683 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6683);
+  }
+  /* parser/parser.nit:6685 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6685);
+  }
+  /* parser/parser.nit:6687 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6687);
+  }
+  /* parser/parser.nit:6689 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6689);
+  }
+  /* parser/parser.nit:6691 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6691);
+  }
+  /* parser/parser.nit:6692 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[9], NIT_NULL, fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6702 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:6703 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6703);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction159___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[10];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 6708;
+  fra.me.meth = LOCATE_parser___ReduceAction159___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 11;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   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;
-  /* ./parser//parser.nit:6327 */
+  /* parser/parser.nit:6710 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6328 */
+  /* parser/parser.nit:6711 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6329 */
+  /* parser/parser.nit:6712 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6331 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:6713 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6714 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6715 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6716 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6717 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6718 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6719 */
+  fra.me.REG[9] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6720 */
+  fra.me.REG[10] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6722 */
+  REGB0 = TAG_Bool((fra.me.REG[10]==NIT_NULL) || VAL_ISA(fra.me.REG[10], COLOR_parser___parser_nodes___ADoc, ID_parser___parser_nodes___ADoc)) /*cast nullable ADoc*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6722);
+  }
+  /* parser/parser.nit:6724 */
+  REGB0 = TAG_Bool((fra.me.REG[9]==NIT_NULL) || VAL_ISA(fra.me.REG[9], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6724);
+  }
+  /* parser/parser.nit:6726 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6726);
+  }
+  /* parser/parser.nit:6728 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6728);
+  }
+  /* parser/parser.nit:6730 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6730);
+  }
+  /* parser/parser.nit:6732 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6732);
+  }
+  /* parser/parser.nit:6734 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6734);
   }
-  /* ./parser//parser.nit:6333 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreadable, ID_TKwreadable)) /*cast nullable TKwreadable*/;
+  /* parser/parser.nit:6736 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCalls, ID_parser___parser_nodes___AExternCalls)) /*cast nullable AExternCalls*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6736);
   }
-  /* ./parser//parser.nit:6334 */
-  fra.me.REG[3] = NEW_AReadAble_parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6338 */
+  /* parser/parser.nit:6737 */
+  fra.me.REG[3] = NEW_AExternInitPropdef_parser___parser_prod___AExternInitPropdef___init_aexterninitpropdef(fra.me.REG[10], fra.me.REG[9], fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6747 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6339 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction144____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6748 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6339);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6748);
   }
-  REGB0 = ATTR_parser___ReduceAction144____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction144___init(val_t p0, val_t p1, int* init_table){
-  int itpos147 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction144].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos147]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6342;
-  fra.me.meth = LOCATE_parser___ReduceAction144___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6342 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction144____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos147] = 1;
-  return;
-}
-void parser___ReduceAction145___action(val_t p0, val_t p1){
+void parser___ReduceAction160___action(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;
-  fra.me.line = 6346;
-  fra.me.meth = LOCATE_parser___ReduceAction145___action;
+  fra.me.line = 6753;
+  fra.me.meth = LOCATE_parser___ReduceAction160___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6348 */
+  /* parser/parser.nit:6755 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6349 */
+  /* parser/parser.nit:6756 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6351 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:6758 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6758);
   }
-  /* ./parser//parser.nit:6352 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6357 */
+  /* parser/parser.nit:6759 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6763 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6358 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction145____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6764 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6358);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6764);
   }
-  REGB0 = ATTR_parser___ReduceAction145____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction145___init(val_t p0, val_t p1, int* init_table){
-  int itpos148 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction145].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos148]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6361;
-  fra.me.meth = LOCATE_parser___ReduceAction145___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6361 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction145____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos148] = 1;
-  return;
-}
-void parser___ReduceAction146___action(val_t p0, val_t p1){
+void parser___ReduceAction161___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6365;
-  fra.me.meth = LOCATE_parser___ReduceAction146___action;
+  fra.me.line = 6769;
+  fra.me.meth = LOCATE_parser___ReduceAction161___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -21009,1419 +19546,1126 @@ void parser___ReduceAction146___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6367 */
+  /* parser/parser.nit:6771 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6368 */
+  /* parser/parser.nit:6772 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6369 */
+  /* parser/parser.nit:6773 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6371 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
+  /* parser/parser.nit:6775 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6371);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6775);
   }
-  /* ./parser//parser.nit:6373 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:6777 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreadable, ID_parser___parser_nodes___TKwreadable)) /*cast nullable TKwreadable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6373);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6777);
   }
-  /* ./parser//parser.nit:6374 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:6379 */
+  /* parser/parser.nit:6778 */
+  fra.me.REG[3] = NEW_AReadAble_parser___parser_prod___AReadAble___init_areadable(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6782 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6380 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction146____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6783 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6380);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6783);
   }
-  REGB0 = ATTR_parser___ReduceAction146____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction146___init(val_t p0, val_t p1, int* init_table){
-  int itpos149 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction146].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos149]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6383;
-  fra.me.meth = LOCATE_parser___ReduceAction146___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6383 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction146____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos149] = 1;
-  return;
-}
-void parser___ReduceAction147___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction162___action(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;
-  fra.me.line = 6387;
-  fra.me.meth = LOCATE_parser___ReduceAction147___action;
+  fra.me.line = 6788;
+  fra.me.meth = LOCATE_parser___ReduceAction162___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6389 */
+  /* parser/parser.nit:6790 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6390 */
+  /* parser/parser.nit:6791 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6391 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6393 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6393);
-  }
-  /* ./parser//parser.nit:6395 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:6793 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6395);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6793);
   }
-  /* ./parser//parser.nit:6396 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6401 */
+  /* parser/parser.nit:6794 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6799 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6402 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction147____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6800 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6402);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6800);
   }
-  REGB0 = ATTR_parser___ReduceAction147____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction147___init(val_t p0, val_t p1, int* init_table){
-  int itpos150 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction147].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos150]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6405;
-  fra.me.meth = LOCATE_parser___ReduceAction147___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6405 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction147____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos150] = 1;
-  return;
-}
-void parser___ReduceAction148___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction163___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6409;
-  fra.me.meth = LOCATE_parser___ReduceAction148___action;
+  fra.me.line = 6805;
+  fra.me.meth = LOCATE_parser___ReduceAction163___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6411 */
+  /* parser/parser.nit:6807 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6412 */
+  /* parser/parser.nit:6808 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6413 */
+  /* parser/parser.nit:6809 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6414 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6416 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwredef, ID_TKwredef)) /*cast nullable TKwredef*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6416);
-  }
-  /* ./parser//parser.nit:6418 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AVisibility, ID_AVisibility)) /*cast nullable AVisibility*/;
+  /* parser/parser.nit:6811 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6418);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6811);
   }
-  /* ./parser//parser.nit:6420 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwwritable, ID_TKwwritable)) /*cast nullable TKwwritable*/;
+  /* parser/parser.nit:6813 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6813);
   }
-  /* ./parser//parser.nit:6421 */
-  fra.me.REG[3] = NEW_AWriteAble_parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6426 */
+  /* parser/parser.nit:6814 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:6819 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6427 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction148____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6820 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6820);
   }
-  REGB0 = ATTR_parser___ReduceAction148____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction148___init(val_t p0, val_t p1, int* init_table){
-  int itpos151 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction148].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos151]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6430;
-  fra.me.meth = LOCATE_parser___ReduceAction148___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6430 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction148____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos151] = 1;
-  return;
-}
-void parser___ReduceAction149___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction164___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6434;
-  fra.me.meth = LOCATE_parser___ReduceAction149___action;
+  fra.me.line = 6825;
+  fra.me.meth = LOCATE_parser___ReduceAction164___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6436 */
+  /* parser/parser.nit:6827 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6437 */
-  fra.me.REG[3] = NEW_APublicVisibility_parser_prod___APublicVisibility___init_apublicvisibility();
-  /* ./parser//parser.nit:6439 */
+  /* parser/parser.nit:6828 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6829 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6831 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6831);
+  }
+  /* parser/parser.nit:6833 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6833);
+  }
+  /* parser/parser.nit:6834 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6839 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6440 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction149____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6840 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6440);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6840);
   }
-  REGB0 = ATTR_parser___ReduceAction149____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction149___init(val_t p0, val_t p1, int* init_table){
-  int itpos152 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction149].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos152]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6443;
-  fra.me.meth = LOCATE_parser___ReduceAction149___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6443 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction149____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos152] = 1;
-  return;
-}
-void parser___ReduceAction150___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction165___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6447;
-  fra.me.meth = LOCATE_parser___ReduceAction150___action;
+  fra.me.line = 6845;
+  fra.me.meth = LOCATE_parser___ReduceAction165___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6449 */
+  /* parser/parser.nit:6847 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6450 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6451 */
+  /* parser/parser.nit:6848 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6453 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprivate, ID_TKwprivate)) /*cast nullable TKwprivate*/;
+  /* parser/parser.nit:6849 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6850 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6852 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwredef, ID_parser___parser_nodes___TKwredef)) /*cast nullable TKwredef*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6852);
+  }
+  /* parser/parser.nit:6854 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AVisibility, ID_parser___parser_nodes___AVisibility)) /*cast nullable AVisibility*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6854);
+  }
+  /* parser/parser.nit:6856 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwwritable, ID_parser___parser_nodes___TKwwritable)) /*cast nullable TKwwritable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6453);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6856);
   }
-  /* ./parser//parser.nit:6454 */
-  fra.me.REG[3] = NEW_APrivateVisibility_parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6457 */
+  /* parser/parser.nit:6857 */
+  fra.me.REG[3] = NEW_AWriteAble_parser___parser_prod___AWriteAble___init_awriteable(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:6862 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6458 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction150____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6863 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6458);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6863);
   }
-  REGB0 = ATTR_parser___ReduceAction150____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction150___init(val_t p0, val_t p1, int* init_table){
-  int itpos153 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction150].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos153]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6461;
-  fra.me.meth = LOCATE_parser___ReduceAction150___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6461 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction150____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos153] = 1;
-  return;
-}
-void parser___ReduceAction151___action(val_t p0, val_t p1){
+void parser___ReduceAction166___action(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;
-  fra.me.line = 6465;
-  fra.me.meth = LOCATE_parser___ReduceAction151___action;
+  fra.me.line = 6868;
+  fra.me.meth = LOCATE_parser___ReduceAction166___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6467 */
+  /* parser/parser.nit:6870 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6468 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6469 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6471 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwprotected, ID_TKwprotected)) /*cast nullable TKwprotected*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6471);
-  }
-  /* ./parser//parser.nit:6472 */
-  fra.me.REG[3] = NEW_AProtectedVisibility_parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6475 */
+  /* parser/parser.nit:6871 */
+  fra.me.REG[3] = NEW_APublicVisibility_parser___parser_prod___APublicVisibility___init_apublicvisibility();
+  /* parser/parser.nit:6872 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6476 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction151____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6873 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6476);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6873);
   }
-  REGB0 = ATTR_parser___ReduceAction151____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction151___init(val_t p0, val_t p1, int* init_table){
-  int itpos154 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction151].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos154]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6479;
-  fra.me.meth = LOCATE_parser___ReduceAction151___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6479 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction151____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos154] = 1;
-  return;
-}
-void parser___ReduceAction152___action(val_t p0, val_t p1){
+void parser___ReduceAction167___action(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;
-  fra.me.line = 6483;
-  fra.me.meth = LOCATE_parser___ReduceAction152___action;
+  fra.me.line = 6878;
+  fra.me.meth = LOCATE_parser___ReduceAction167___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6485 */
+  /* parser/parser.nit:6880 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6486 */
+  /* parser/parser.nit:6881 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6487 */
+  /* parser/parser.nit:6882 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6489 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwintrude, ID_TKwintrude)) /*cast nullable TKwintrude*/;
+  /* parser/parser.nit:6884 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprivate, ID_parser___parser_nodes___TKwprivate)) /*cast nullable TKwprivate*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6489);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6884);
   }
-  /* ./parser//parser.nit:6490 */
-  fra.me.REG[3] = NEW_AIntrudeVisibility_parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
-  /* ./parser//parser.nit:6493 */
+  /* parser/parser.nit:6885 */
+  fra.me.REG[3] = NEW_APrivateVisibility_parser___parser_prod___APrivateVisibility___init_aprivatevisibility(fra.me.REG[3]);
+  /* parser/parser.nit:6888 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6494 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction152____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6889 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6494);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6889);
   }
-  REGB0 = ATTR_parser___ReduceAction152____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction152___init(val_t p0, val_t p1, int* init_table){
-  int itpos155 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction152].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos155]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6497;
-  fra.me.meth = LOCATE_parser___ReduceAction152___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6497 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction152____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos155] = 1;
-  return;
-}
-void parser___ReduceAction153___action(val_t p0, val_t p1){
+void parser___ReduceAction168___action(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;
-  fra.me.line = 6501;
-  fra.me.meth = LOCATE_parser___ReduceAction153___action;
+  fra.me.line = 6894;
+  fra.me.meth = LOCATE_parser___ReduceAction168___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6503 */
+  /* parser/parser.nit:6896 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6504 */
+  /* parser/parser.nit:6897 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6506 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:6898 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6900 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwprotected, ID_parser___parser_nodes___TKwprotected)) /*cast nullable TKwprotected*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6900);
   }
-  /* ./parser//parser.nit:6507 */
-  fra.me.REG[3] = NEW_AIdMethid_parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6510 */
+  /* parser/parser.nit:6901 */
+  fra.me.REG[3] = NEW_AProtectedVisibility_parser___parser_prod___AProtectedVisibility___init_aprotectedvisibility(fra.me.REG[3]);
+  /* parser/parser.nit:6904 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6511 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction153____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6905 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6511);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6905);
   }
-  REGB0 = ATTR_parser___ReduceAction153____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction153___init(val_t p0, val_t p1, int* init_table){
-  int itpos156 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction153].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos156]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6514;
-  fra.me.meth = LOCATE_parser___ReduceAction153___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6514 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction153____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos156] = 1;
-  return;
-}
-void parser___ReduceAction154___action(val_t p0, val_t p1){
+void parser___ReduceAction169___action(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;
-  fra.me.line = 6518;
-  fra.me.meth = LOCATE_parser___ReduceAction154___action;
+  fra.me.line = 6910;
+  fra.me.meth = LOCATE_parser___ReduceAction169___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6520 */
+  /* parser/parser.nit:6912 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6521 */
+  /* parser/parser.nit:6913 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:6914 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6523 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPlus, ID_TPlus)) /*cast nullable TPlus*/;
+  /* parser/parser.nit:6916 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwintrude, ID_parser___parser_nodes___TKwintrude)) /*cast nullable TKwintrude*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6523);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6916);
   }
-  /* ./parser//parser.nit:6524 */
-  fra.me.REG[3] = NEW_APlusMethid_parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6527 */
+  /* parser/parser.nit:6917 */
+  fra.me.REG[3] = NEW_AIntrudeVisibility_parser___parser_prod___AIntrudeVisibility___init_aintrudevisibility(fra.me.REG[3]);
+  /* parser/parser.nit:6920 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6528 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction154____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6921 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6528);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6921);
   }
-  REGB0 = ATTR_parser___ReduceAction154____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction154___init(val_t p0, val_t p1, int* init_table){
-  int itpos157 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction154].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos157]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6531;
-  fra.me.meth = LOCATE_parser___ReduceAction154___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6531 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction154____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos157] = 1;
-  return;
-}
-void parser___ReduceAction155___action(val_t p0, val_t p1){
+void parser___ReduceAction170___action(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;
-  fra.me.line = 6535;
-  fra.me.meth = LOCATE_parser___ReduceAction155___action;
+  fra.me.line = 6926;
+  fra.me.meth = LOCATE_parser___ReduceAction170___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6537 */
+  /* parser/parser.nit:6928 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6538 */
+  /* parser/parser.nit:6929 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6540 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
+  /* parser/parser.nit:6931 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6540);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6931);
   }
-  /* ./parser//parser.nit:6541 */
-  fra.me.REG[3] = NEW_AMinusMethid_parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6544 */
+  /* parser/parser.nit:6932 */
+  fra.me.REG[3] = NEW_AIdMethid_parser___parser_prod___AIdMethid___init_aidmethid(fra.me.REG[3]);
+  /* parser/parser.nit:6935 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6545 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction155____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6936 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6545);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6936);
   }
-  REGB0 = ATTR_parser___ReduceAction155____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction155___init(val_t p0, val_t p1, int* init_table){
-  int itpos158 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction155].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos158]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6548;
-  fra.me.meth = LOCATE_parser___ReduceAction155___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6548 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction155____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos158] = 1;
-  return;
-}
-void parser___ReduceAction156___action(val_t p0, val_t p1){
+void parser___ReduceAction171___action(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;
-  fra.me.line = 6552;
-  fra.me.meth = LOCATE_parser___ReduceAction156___action;
+  fra.me.line = 6941;
+  fra.me.meth = LOCATE_parser___ReduceAction171___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6554 */
+  /* parser/parser.nit:6943 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6555 */
+  /* parser/parser.nit:6944 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6557 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStar, ID_TStar)) /*cast nullable TStar*/;
+  /* parser/parser.nit:6946 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPlus, ID_parser___parser_nodes___TPlus)) /*cast nullable TPlus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6557);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6946);
   }
-  /* ./parser//parser.nit:6558 */
-  fra.me.REG[3] = NEW_AStarMethid_parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6561 */
+  /* parser/parser.nit:6947 */
+  fra.me.REG[3] = NEW_APlusMethid_parser___parser_prod___APlusMethid___init_aplusmethid(fra.me.REG[3]);
+  /* parser/parser.nit:6950 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6562 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction156____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6951 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6562);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6951);
   }
-  REGB0 = ATTR_parser___ReduceAction156____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction156___init(val_t p0, val_t p1, int* init_table){
-  int itpos159 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction156].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos159]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6565;
-  fra.me.meth = LOCATE_parser___ReduceAction156___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6565 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction156____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos159] = 1;
-  return;
-}
-void parser___ReduceAction157___action(val_t p0, val_t p1){
+void parser___ReduceAction172___action(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;
-  fra.me.line = 6569;
-  fra.me.meth = LOCATE_parser___ReduceAction157___action;
+  fra.me.line = 6956;
+  fra.me.meth = LOCATE_parser___ReduceAction172___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6571 */
+  /* parser/parser.nit:6958 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6572 */
+  /* parser/parser.nit:6959 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6574 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TSlash, ID_TSlash)) /*cast nullable TSlash*/;
+  /* parser/parser.nit:6961 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6574);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6961);
   }
-  /* ./parser//parser.nit:6575 */
-  fra.me.REG[3] = NEW_ASlashMethid_parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6578 */
+  /* parser/parser.nit:6962 */
+  fra.me.REG[3] = NEW_AMinusMethid_parser___parser_prod___AMinusMethid___init_aminusmethid(fra.me.REG[3]);
+  /* parser/parser.nit:6965 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6579 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction157____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6966 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6579);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6966);
   }
-  REGB0 = ATTR_parser___ReduceAction157____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction157___init(val_t p0, val_t p1, int* init_table){
-  int itpos160 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction157].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos160]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6582;
-  fra.me.meth = LOCATE_parser___ReduceAction157___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6582 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction157____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos160] = 1;
-  return;
-}
-void parser___ReduceAction158___action(val_t p0, val_t p1){
+void parser___ReduceAction173___action(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;
-  fra.me.line = 6586;
-  fra.me.meth = LOCATE_parser___ReduceAction158___action;
+  fra.me.line = 6971;
+  fra.me.meth = LOCATE_parser___ReduceAction173___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6588 */
+  /* parser/parser.nit:6973 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6589 */
+  /* parser/parser.nit:6974 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6591 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPercent, ID_TPercent)) /*cast nullable TPercent*/;
+  /* parser/parser.nit:6976 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStar, ID_parser___parser_nodes___TStar)) /*cast nullable TStar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6976);
   }
-  /* ./parser//parser.nit:6592 */
-  fra.me.REG[3] = NEW_APercentMethid_parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6595 */
+  /* parser/parser.nit:6977 */
+  fra.me.REG[3] = NEW_AStarMethid_parser___parser_prod___AStarMethid___init_astarmethid(fra.me.REG[3]);
+  /* parser/parser.nit:6980 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6596 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction158____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6981 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6596);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6981);
   }
-  REGB0 = ATTR_parser___ReduceAction158____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction158___init(val_t p0, val_t p1, int* init_table){
-  int itpos161 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction158].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos161]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6599;
-  fra.me.meth = LOCATE_parser___ReduceAction158___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6599 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction158____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos161] = 1;
-  return;
-}
-void parser___ReduceAction159___action(val_t p0, val_t p1){
+void parser___ReduceAction174___action(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;
-  fra.me.line = 6603;
-  fra.me.meth = LOCATE_parser___ReduceAction159___action;
+  fra.me.line = 6986;
+  fra.me.meth = LOCATE_parser___ReduceAction174___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6605 */
+  /* parser/parser.nit:6988 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6606 */
+  /* parser/parser.nit:6989 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6608 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEq, ID_TEq)) /*cast nullable TEq*/;
+  /* parser/parser.nit:6991 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TSlash, ID_parser___parser_nodes___TSlash)) /*cast nullable TSlash*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6608);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 6991);
   }
-  /* ./parser//parser.nit:6609 */
-  fra.me.REG[3] = NEW_AEqMethid_parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6612 */
+  /* parser/parser.nit:6992 */
+  fra.me.REG[3] = NEW_ASlashMethid_parser___parser_prod___ASlashMethid___init_aslashmethid(fra.me.REG[3]);
+  /* parser/parser.nit:6995 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6613 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction159____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:6996 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6613);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6996);
   }
-  REGB0 = ATTR_parser___ReduceAction159____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction159___init(val_t p0, val_t p1, int* init_table){
-  int itpos162 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction159].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 6616;
-  fra.me.meth = LOCATE_parser___ReduceAction159___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6616 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction159____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos162] = 1;
-  return;
-}
-void parser___ReduceAction160___action(val_t p0, val_t p1){
+void parser___ReduceAction175___action(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;
-  fra.me.line = 6620;
-  fra.me.meth = LOCATE_parser___ReduceAction160___action;
+  fra.me.line = 7001;
+  fra.me.meth = LOCATE_parser___ReduceAction175___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6622 */
+  /* parser/parser.nit:7003 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6623 */
+  /* parser/parser.nit:7004 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6625 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNe, ID_TNe)) /*cast nullable TNe*/;
+  /* parser/parser.nit:7006 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPercent, ID_parser___parser_nodes___TPercent)) /*cast nullable TPercent*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6625);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7006);
   }
-  /* ./parser//parser.nit:6626 */
-  fra.me.REG[3] = NEW_ANeMethid_parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6629 */
+  /* parser/parser.nit:7007 */
+  fra.me.REG[3] = NEW_APercentMethid_parser___parser_prod___APercentMethid___init_apercentmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7010 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6630 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction160____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7011 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6630);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7011);
   }
-  REGB0 = ATTR_parser___ReduceAction160____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction160___init(val_t p0, val_t p1, int* init_table){
-  int itpos163 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction160].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos163]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6633;
-  fra.me.meth = LOCATE_parser___ReduceAction160___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6633 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction160____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos163] = 1;
-  return;
-}
-void parser___ReduceAction161___action(val_t p0, val_t p1){
+void parser___ReduceAction176___action(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;
-  fra.me.line = 6637;
-  fra.me.meth = LOCATE_parser___ReduceAction161___action;
+  fra.me.line = 7016;
+  fra.me.meth = LOCATE_parser___ReduceAction176___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6639 */
+  /* parser/parser.nit:7018 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6640 */
+  /* parser/parser.nit:7019 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6642 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLe, ID_TLe)) /*cast nullable TLe*/;
+  /* parser/parser.nit:7021 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEq, ID_parser___parser_nodes___TEq)) /*cast nullable TEq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7021);
   }
-  /* ./parser//parser.nit:6643 */
-  fra.me.REG[3] = NEW_ALeMethid_parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6646 */
+  /* parser/parser.nit:7022 */
+  fra.me.REG[3] = NEW_AEqMethid_parser___parser_prod___AEqMethid___init_aeqmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7025 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6647 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction161____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7026 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6647);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7026);
   }
-  REGB0 = ATTR_parser___ReduceAction161____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction161___init(val_t p0, val_t p1, int* init_table){
-  int itpos164 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction161].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos164]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6650;
-  fra.me.meth = LOCATE_parser___ReduceAction161___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6650 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction161____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos164] = 1;
-  return;
-}
-void parser___ReduceAction162___action(val_t p0, val_t p1){
+void parser___ReduceAction177___action(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;
-  fra.me.line = 6654;
-  fra.me.meth = LOCATE_parser___ReduceAction162___action;
+  fra.me.line = 7031;
+  fra.me.meth = LOCATE_parser___ReduceAction177___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6656 */
+  /* parser/parser.nit:7033 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6657 */
+  /* parser/parser.nit:7034 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6659 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGe, ID_TGe)) /*cast nullable TGe*/;
+  /* parser/parser.nit:7036 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNe, ID_parser___parser_nodes___TNe)) /*cast nullable TNe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6659);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7036);
   }
-  /* ./parser//parser.nit:6660 */
-  fra.me.REG[3] = NEW_AGeMethid_parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6663 */
+  /* parser/parser.nit:7037 */
+  fra.me.REG[3] = NEW_ANeMethid_parser___parser_prod___ANeMethid___init_anemethid(fra.me.REG[3]);
+  /* parser/parser.nit:7040 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6664 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction162____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7041 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6664);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7041);
   }
-  REGB0 = ATTR_parser___ReduceAction162____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction162___init(val_t p0, val_t p1, int* init_table){
-  int itpos165 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction162].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction178___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos165]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6667;
-  fra.me.meth = LOCATE_parser___ReduceAction162___init;
+  fra.me.line = 7046;
+  fra.me.meth = LOCATE_parser___ReduceAction178___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6667 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction162____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7048 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7049 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7051 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLe, ID_parser___parser_nodes___TLe)) /*cast nullable TLe*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7051);
+  }
+  /* parser/parser.nit:7052 */
+  fra.me.REG[3] = NEW_ALeMethid_parser___parser_prod___ALeMethid___init_alemethid(fra.me.REG[3]);
+  /* parser/parser.nit:7055 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7056 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7056);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos165] = 1;
   return;
 }
-void parser___ReduceAction163___action(val_t p0, val_t p1){
+void parser___ReduceAction179___action(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;
-  fra.me.line = 6671;
-  fra.me.meth = LOCATE_parser___ReduceAction163___action;
+  fra.me.line = 7061;
+  fra.me.meth = LOCATE_parser___ReduceAction179___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6673 */
+  /* parser/parser.nit:7063 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6674 */
+  /* parser/parser.nit:7064 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6676 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLt, ID_TLt)) /*cast nullable TLt*/;
+  /* parser/parser.nit:7066 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGe, ID_parser___parser_nodes___TGe)) /*cast nullable TGe*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6676);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7066);
   }
-  /* ./parser//parser.nit:6677 */
-  fra.me.REG[3] = NEW_ALtMethid_parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6680 */
+  /* parser/parser.nit:7067 */
+  fra.me.REG[3] = NEW_AGeMethid_parser___parser_prod___AGeMethid___init_agemethid(fra.me.REG[3]);
+  /* parser/parser.nit:7070 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6681 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction163____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7071 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6681);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7071);
   }
-  REGB0 = ATTR_parser___ReduceAction163____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction163___init(val_t p0, val_t p1, int* init_table){
-  int itpos166 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction163].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction180___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos166]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6684;
-  fra.me.meth = LOCATE_parser___ReduceAction163___init;
+  fra.me.line = 7076;
+  fra.me.meth = LOCATE_parser___ReduceAction180___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6684 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction163____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7078 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7079 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7081 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLt, ID_parser___parser_nodes___TLt)) /*cast nullable TLt*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7081);
+  }
+  /* parser/parser.nit:7082 */
+  fra.me.REG[3] = NEW_ALtMethid_parser___parser_prod___ALtMethid___init_altmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7085 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7086 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7086);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos166] = 1;
   return;
 }
-void parser___ReduceAction164___action(val_t p0, val_t p1){
+void parser___ReduceAction181___action(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;
-  fra.me.line = 6688;
-  fra.me.meth = LOCATE_parser___ReduceAction164___action;
+  fra.me.line = 7091;
+  fra.me.meth = LOCATE_parser___ReduceAction181___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6690 */
+  /* parser/parser.nit:7093 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6691 */
+  /* parser/parser.nit:7094 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6693 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGt, ID_TGt)) /*cast nullable TGt*/;
+  /* parser/parser.nit:7096 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGt, ID_parser___parser_nodes___TGt)) /*cast nullable TGt*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7096);
   }
-  /* ./parser//parser.nit:6694 */
-  fra.me.REG[3] = NEW_AGtMethid_parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6697 */
+  /* parser/parser.nit:7097 */
+  fra.me.REG[3] = NEW_AGtMethid_parser___parser_prod___AGtMethid___init_agtmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7100 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6698 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction164____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7101 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6698);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7101);
   }
-  REGB0 = ATTR_parser___ReduceAction164____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction164___init(val_t p0, val_t p1, int* init_table){
-  int itpos167 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction164].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction182___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos167]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6701;
-  fra.me.meth = LOCATE_parser___ReduceAction164___init;
+  fra.me.line = 7106;
+  fra.me.meth = LOCATE_parser___ReduceAction182___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6701 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction164____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7108 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7109 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7111 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TLl, ID_parser___parser_nodes___TLl)) /*cast nullable TLl*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7111);
+  }
+  /* parser/parser.nit:7112 */
+  fra.me.REG[3] = NEW_ALlMethid_parser___parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7115 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7116 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7116);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos167] = 1;
   return;
 }
-void parser___ReduceAction165___action(val_t p0, val_t p1){
+void parser___ReduceAction183___action(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;
-  fra.me.line = 6705;
-  fra.me.meth = LOCATE_parser___ReduceAction165___action;
+  fra.me.line = 7121;
+  fra.me.meth = LOCATE_parser___ReduceAction183___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6707 */
+  /* parser/parser.nit:7123 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6708 */
+  /* parser/parser.nit:7124 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6710 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TLl, ID_TLl)) /*cast nullable TLl*/;
+  /* parser/parser.nit:7126 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TGg, ID_parser___parser_nodes___TGg)) /*cast nullable TGg*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6710);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7126);
   }
-  /* ./parser//parser.nit:6711 */
-  fra.me.REG[3] = NEW_ALlMethid_parser_prod___ALlMethid___init_allmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6714 */
+  /* parser/parser.nit:7127 */
+  fra.me.REG[3] = NEW_AGgMethid_parser___parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7130 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6715 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction165____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7131 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6715);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7131);
   }
-  REGB0 = ATTR_parser___ReduceAction165____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction165___init(val_t p0, val_t p1, int* init_table){
-  int itpos168 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction165].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction184___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos168]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6718;
-  fra.me.meth = LOCATE_parser___ReduceAction165___init;
+  fra.me.line = 7136;
+  fra.me.meth = LOCATE_parser___ReduceAction184___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6718 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction165____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7138 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7139 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7140 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7142 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7142);
+  }
+  /* parser/parser.nit:7144 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7144);
+  }
+  /* parser/parser.nit:7145 */
+  fra.me.REG[3] = NEW_ABraMethid_parser___parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7149 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:7150 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7150);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos168] = 1;
   return;
 }
-void parser___ReduceAction166___action(val_t p0, val_t p1){
+void parser___ReduceAction185___action(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;
-  fra.me.line = 6722;
-  fra.me.meth = LOCATE_parser___ReduceAction166___action;
+  fra.me.line = 7155;
+  fra.me.meth = LOCATE_parser___ReduceAction185___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6724 */
+  /* parser/parser.nit:7157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6725 */
+  /* parser/parser.nit:7158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6727 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TGg, ID_TGg)) /*cast nullable TGg*/;
+  /* parser/parser.nit:7160 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStarship, ID_parser___parser_nodes___TStarship)) /*cast nullable TStarship*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7160);
   }
-  /* ./parser//parser.nit:6728 */
-  fra.me.REG[3] = NEW_AGgMethid_parser_prod___AGgMethid___init_aggmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6731 */
+  /* parser/parser.nit:7161 */
+  fra.me.REG[3] = NEW_AStarshipMethid_parser___parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
+  /* parser/parser.nit:7164 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6732 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction166____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7165 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6732);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7165);
   }
-  REGB0 = ATTR_parser___ReduceAction166____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction166___init(val_t p0, val_t p1, int* init_table){
-  int itpos169 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction166].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos169]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6735;
-  fra.me.meth = LOCATE_parser___ReduceAction166___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6735 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction166____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos169] = 1;
-  return;
-}
-void parser___ReduceAction167___action(val_t p0, val_t p1){
+void parser___ReduceAction186___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6739;
-  fra.me.meth = LOCATE_parser___ReduceAction167___action;
+  fra.me.line = 7170;
+  fra.me.meth = LOCATE_parser___ReduceAction186___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22429,299 +20673,444 @@ void parser___ReduceAction167___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6741 */
+  /* parser/parser.nit:7172 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6742 */
+  /* parser/parser.nit:7173 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6743 */
+  /* parser/parser.nit:7174 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6745 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:7176 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6745);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7176);
   }
-  /* ./parser//parser.nit:6747 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
+  /* parser/parser.nit:7178 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7178);
   }
-  /* ./parser//parser.nit:6748 */
-  fra.me.REG[3] = NEW_ABraMethid_parser_prod___ABraMethid___init_abramethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6752 */
+  /* parser/parser.nit:7179 */
+  fra.me.REG[3] = NEW_AAssignMethid_parser___parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7183 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6753 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction167____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7184 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6753);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7184);
   }
-  REGB0 = ATTR_parser___ReduceAction167____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction167___init(val_t p0, val_t p1, int* init_table){
-  int itpos170 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction167].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 6756;
-  fra.me.meth = LOCATE_parser___ReduceAction167___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6756 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction167____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos170] = 1;
-  return;
-}
-void parser___ReduceAction168___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction187___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6760;
-  fra.me.meth = LOCATE_parser___ReduceAction168___action;
+  fra.me.line = 7189;
+  fra.me.meth = LOCATE_parser___ReduceAction187___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6762 */
+  /* parser/parser.nit:7191 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6763 */
+  /* parser/parser.nit:7192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6765 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStarship, ID_TStarship)) /*cast nullable TStarship*/;
+  /* parser/parser.nit:7193 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7194 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7196 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7196);
+  }
+  /* parser/parser.nit:7198 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7198);
+  }
+  /* parser/parser.nit:7200 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6765);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7200);
   }
-  /* ./parser//parser.nit:6766 */
-  fra.me.REG[3] = NEW_AStarshipMethid_parser_prod___AStarshipMethid___init_astarshipmethid(fra.me.REG[3]);
-  /* ./parser//parser.nit:6769 */
+  /* parser/parser.nit:7201 */
+  fra.me.REG[3] = NEW_ABraassignMethid_parser___parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7206 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6770 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction168____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7207 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6770);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7207);
   }
-  REGB0 = ATTR_parser___ReduceAction168____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction168___init(val_t p0, val_t p1, int* init_table){
-  int itpos171 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction168].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos171]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6773;
-  fra.me.meth = LOCATE_parser___ReduceAction168___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6773 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction168____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos171] = 1;
-  return;
-}
-void parser___ReduceAction169___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction188___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6777;
-  fra.me.meth = LOCATE_parser___ReduceAction169___action;
+  fra.me.line = 7212;
+  fra.me.meth = LOCATE_parser___ReduceAction188___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6779 */
+  /* parser/parser.nit:7214 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6780 */
+  /* parser/parser.nit:7215 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7216 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6781 */
+  /* parser/parser.nit:7217 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6783 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7218 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7219 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7220 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7221 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7223 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6783);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7223);
   }
-  /* ./parser//parser.nit:6785 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:7225 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7225);
   }
-  /* ./parser//parser.nit:6786 */
-  fra.me.REG[3] = NEW_AAssignMethid_parser_prod___AAssignMethid___init_aassignmethid(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6790 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6791 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction169____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7227 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7227);
+  }
+  /* parser/parser.nit:7228 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser.nit:7235 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:7236 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6791);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7236);
   }
-  REGB0 = ATTR_parser___ReduceAction169____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction169___init(val_t p0, val_t p1, int* init_table){
-  int itpos172 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction169].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction189___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos172]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6794;
-  fra.me.meth = LOCATE_parser___ReduceAction169___init;
+  fra.me.line = 7241;
+  fra.me.meth = LOCATE_parser___ReduceAction189___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6794 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction169____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7243 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7244 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7245 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7246 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7247 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7248 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7249 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7250 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7251 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7253 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7253);
+  }
+  /* parser/parser.nit:7255 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7255);
+  }
+  /* parser/parser.nit:7256 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
+  fra.me.REG[7] = fra.me.REG[5];
+  /* parser/parser.nit:7258 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7258);
+  }
+  /* parser/parser.nit:7260 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7260);
+  }
+  /* parser/parser.nit:7261 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser.nit:7268 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:7269 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7269);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos172] = 1;
   return;
 }
-void parser___ReduceAction170___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction190___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6798;
-  fra.me.meth = LOCATE_parser___ReduceAction170___action;
+  fra.me.line = 7274;
+  fra.me.meth = LOCATE_parser___ReduceAction190___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   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.nit:6800 */
+  /* parser/parser.nit:7276 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6801 */
+  /* parser/parser.nit:7277 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6802 */
+  /* parser/parser.nit:7278 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7279 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6803 */
+  /* parser/parser.nit:7280 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6805 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TObra, ID_TObra)) /*cast nullable TObra*/;
+  /* parser/parser.nit:7281 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7282 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7283 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7284 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7286 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7286);
   }
-  /* ./parser//parser.nit:6807 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TCbra, ID_TCbra)) /*cast nullable TCbra*/;
+  /* parser/parser.nit:7288 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7288);
   }
-  /* ./parser//parser.nit:6809 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:7290 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7290);
   }
-  /* ./parser//parser.nit:6810 */
-  fra.me.REG[3] = NEW_ABraassignMethid_parser_prod___ABraassignMethid___init_abraassignmethid(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:6815 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:6816 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction170____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7292 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7292);
+  }
+  /* parser/parser.nit:7293 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
+  fra.me.REG[8] = fra.me.REG[3];
+  /* parser/parser.nit:7294 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[8]);
+  /* parser/parser.nit:7301 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:7302 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6816);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7302);
   }
-  REGB0 = ATTR_parser___ReduceAction170____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction170___init(val_t p0, val_t p1, int* init_table){
-  int itpos173 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction170].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction191___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos173]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6819;
-  fra.me.meth = LOCATE_parser___ReduceAction170___init;
+  fra.me.line = 7307;
+  fra.me.meth = LOCATE_parser___ReduceAction191___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6819 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction170____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7309 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7310 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7311 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7312 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7313 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7314 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7315 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7316 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7317 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7318 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7320 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7320);
+  }
+  /* parser/parser.nit:7322 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7322);
+  }
+  /* parser/parser.nit:7323 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[6]);
+  fra.me.REG[8] = fra.me.REG[6];
+  /* parser/parser.nit:7325 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7325);
+  }
+  /* parser/parser.nit:7327 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7327);
+  }
+  /* parser/parser.nit:7329 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7329);
+  }
+  /* parser/parser.nit:7330 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[3]);
+  fra.me.REG[9] = fra.me.REG[3];
+  /* parser/parser.nit:7331 */
+  fra.me.REG[9] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[9]);
+  /* parser/parser.nit:7338 */
+  fra.me.REG[2] = fra.me.REG[9];
+  /* parser/parser.nit:7339 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7339);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos173] = 1;
   return;
 }
-void parser___ReduceAction171___action(val_t p0, val_t p1){
+void parser___ReduceAction192___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6823;
-  fra.me.meth = LOCATE_parser___ReduceAction171___action;
+  fra.me.line = 7344;
+  fra.me.meth = LOCATE_parser___ReduceAction192___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22731,81 +21120,59 @@ void parser___ReduceAction171___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6825 */
+  /* parser/parser.nit:7346 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6826 */
+  /* parser/parser.nit:7347 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7348 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6827 */
+  /* parser/parser.nit:7349 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6828 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6829 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6831 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7350 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7351 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7352 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7354 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6831);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7354);
   }
-  /* ./parser//parser.nit:6833 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7356 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6833);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7356);
   }
-  /* ./parser//parser.nit:6834 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:6835 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:6840 */
+  /* parser/parser.nit:7357 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
+  /* parser/parser.nit:7364 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6841 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction171____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7365 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7365);
   }
-  REGB0 = ATTR_parser___ReduceAction171____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction171___init(val_t p0, val_t p1, int* init_table){
-  int itpos174 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction171].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos174]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6844;
-  fra.me.meth = LOCATE_parser___ReduceAction171___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6844 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction171____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos174] = 1;
-  return;
-}
-void parser___ReduceAction172___action(val_t p0, val_t p1){
+void parser___ReduceAction193___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6848;
-  fra.me.meth = LOCATE_parser___ReduceAction172___action;
+  fra.me.line = 7370;
+  fra.me.meth = LOCATE_parser___ReduceAction193___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22816,166 +21183,144 @@ void parser___ReduceAction172___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6850 */
+  /* parser/parser.nit:7372 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6851 */
+  /* parser/parser.nit:7373 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7374 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6852 */
+  /* parser/parser.nit:7375 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6853 */
+  /* parser/parser.nit:7376 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6854 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6855 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6857 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7377 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7378 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7379 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7381 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6857);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7381);
   }
-  /* ./parser//parser.nit:6858 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
-  fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:6860 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7383 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6860);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7383);
   }
-  /* ./parser//parser.nit:6862 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7384 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:7386 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6862);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7386);
   }
-  /* ./parser//parser.nit:6863 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:6864 */
-  fra.me.REG[7] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:6869 */
+  /* parser/parser.nit:7387 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:7394 */
   fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:6870 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction172____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7395 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6870);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7395);
   }
-  REGB0 = ATTR_parser___ReduceAction172____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction172___init(val_t p0, val_t p1, int* init_table){
-  int itpos175 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction172].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos175]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6873;
-  fra.me.meth = LOCATE_parser___ReduceAction172___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6873 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction172____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos175] = 1;
-  return;
-}
-void parser___ReduceAction173___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction194___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6877;
-  fra.me.meth = LOCATE_parser___ReduceAction173___action;
+  fra.me.line = 7400;
+  fra.me.meth = LOCATE_parser___ReduceAction194___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6879 */
+  /* parser/parser.nit:7402 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6880 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6881 */
+  /* parser/parser.nit:7403 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6882 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6883 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6885 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7404 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7405 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7406 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7407 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7408 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7409 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7411 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7411);
   }
-  /* ./parser//parser.nit:6886 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:6891 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6892 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction173____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7413 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7413);
+  }
+  /* parser/parser.nit:7415 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7415);
+  }
+  /* parser/parser.nit:7416 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
+  fra.me.REG[7] = fra.me.REG[3];
+  /* parser/parser.nit:7417 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:7424 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:7425 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6892);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7425);
   }
-  REGB0 = ATTR_parser___ReduceAction173____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction173___init(val_t p0, val_t p1, int* init_table){
-  int itpos176 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction173].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos176]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6895;
-  fra.me.meth = LOCATE_parser___ReduceAction173___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6895 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction173____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos176] = 1;
-  return;
-}
-void parser___ReduceAction174___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction195___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6899;
-  fra.me.meth = LOCATE_parser___ReduceAction174___action;
+  fra.me.line = 7430;
+  fra.me.meth = LOCATE_parser___ReduceAction195___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -22983,85 +21328,85 @@ void parser___ReduceAction174___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6901 */
+  /* parser/parser.nit:7432 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6902 */
+  /* parser/parser.nit:7433 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6903 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6904 */
+  /* parser/parser.nit:7434 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7435 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6905 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6906 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6908 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7436 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7437 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7438 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7439 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7440 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7442 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6908);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7442);
   }
-  /* ./parser//parser.nit:6909 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:6911 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7444 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6911);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7444);
   }
-  /* ./parser//parser.nit:6912 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:6917 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6918 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction174____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7445 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
+  fra.me.REG[7] = fra.me.REG[5];
+  /* parser/parser.nit:7447 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7447);
+  }
+  /* parser/parser.nit:7449 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7449);
+  }
+  /* parser/parser.nit:7450 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
+  fra.me.REG[8] = fra.me.REG[3];
+  /* parser/parser.nit:7451 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], NIT_NULL, fra.me.REG[8]);
+  /* parser/parser.nit:7458 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:7459 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6918);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7459);
   }
-  REGB0 = ATTR_parser___ReduceAction174____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction174___init(val_t p0, val_t p1, int* init_table){
-  int itpos177 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction174].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos177]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6921;
-  fra.me.meth = LOCATE_parser___ReduceAction174___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6921 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction174____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos177] = 1;
-  return;
-}
-void parser___ReduceAction175___action(val_t p0, val_t p1){
+void parser___ReduceAction196___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6925;
-  fra.me.meth = LOCATE_parser___ReduceAction175___action;
+  fra.me.line = 7464;
+  fra.me.meth = LOCATE_parser___ReduceAction196___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23070,73 +21415,49 @@ void parser___ReduceAction175___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6927 */
+  /* parser/parser.nit:7466 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6928 */
+  /* parser/parser.nit:7467 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7468 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6929 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6930 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6932 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7469 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7470 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7472 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7472);
   }
-  /* ./parser//parser.nit:6933 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:6934 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:6939 */
+  /* parser/parser.nit:7473 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:7480 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:6940 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction175____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7481 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6940);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7481);
   }
-  REGB0 = ATTR_parser___ReduceAction175____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction175___init(val_t p0, val_t p1, int* init_table){
-  int itpos178 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction175].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos178]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6943;
-  fra.me.meth = LOCATE_parser___ReduceAction175___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6943 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction175____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos178] = 1;
-  return;
-}
-void parser___ReduceAction176___action(val_t p0, val_t p1){
+void parser___ReduceAction197___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6947;
-  fra.me.meth = LOCATE_parser___ReduceAction176___action;
+  fra.me.line = 7486;
+  fra.me.meth = LOCATE_parser___ReduceAction197___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23146,84 +21467,60 @@ void parser___ReduceAction176___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6949 */
+  /* parser/parser.nit:7488 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6950 */
+  /* parser/parser.nit:7489 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6951 */
+  /* parser/parser.nit:7490 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6952 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6953 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6955 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7491 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7492 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7493 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7495 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6955);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7495);
   }
-  /* ./parser//parser.nit:6956 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:6958 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7497 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 6958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7497);
   }
-  /* ./parser//parser.nit:6959 */
+  /* parser/parser.nit:7498 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:6960 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:6965 */
+  /* parser/parser.nit:7499 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:7506 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:6966 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction176____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7507 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6966);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7507);
   }
-  REGB0 = ATTR_parser___ReduceAction176____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction176___init(val_t p0, val_t p1, int* init_table){
-  int itpos179 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction176].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos179]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6969;
-  fra.me.meth = LOCATE_parser___ReduceAction176___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6969 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction176____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos179] = 1;
-  return;
-}
-void parser___ReduceAction177___action(val_t p0, val_t p1){
+void parser___ReduceAction198___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6973;
-  fra.me.meth = LOCATE_parser___ReduceAction177___action;
+  fra.me.line = 7512;
+  fra.me.meth = LOCATE_parser___ReduceAction198___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23231,64 +21528,41 @@ void parser___ReduceAction177___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6975 */
+  /* parser/parser.nit:7514 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6976 */
+  /* parser/parser.nit:7515 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6977 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6978 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6979 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:6984 */
+  /* parser/parser.nit:7516 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7517 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7518 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:7525 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:6985 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction177____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7526 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 6985);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7526);
   }
-  REGB0 = ATTR_parser___ReduceAction177____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction177___init(val_t p0, val_t p1, int* init_table){
-  int itpos180 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction177].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos180]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 6988;
-  fra.me.meth = LOCATE_parser___ReduceAction177___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:6988 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction177____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos180] = 1;
-  return;
-}
-void parser___ReduceAction178___action(val_t p0, val_t p1){
+void parser___ReduceAction199___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 6992;
-  fra.me.meth = LOCATE_parser___ReduceAction178___action;
+  fra.me.line = 7531;
+  fra.me.meth = LOCATE_parser___ReduceAction199___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23297,370 +21571,424 @@ void parser___ReduceAction178___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:6994 */
+  /* parser/parser.nit:7533 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:6995 */
+  /* parser/parser.nit:7534 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6996 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:6997 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:6998 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7000 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7535 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7536 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7537 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7539 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7539);
   }
-  /* ./parser//parser.nit:7001 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:7002 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:7007 */
+  /* parser/parser.nit:7540 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
+  fra.me.REG[5] = fra.me.REG[3];
+  /* parser/parser.nit:7541 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, NIT_NULL, fra.me.REG[5]);
+  /* parser/parser.nit:7548 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7008 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction178____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7549 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7008);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7549);
   }
-  REGB0 = ATTR_parser___ReduceAction178____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction178___init(val_t p0, val_t p1, int* init_table){
-  int itpos181 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction178].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos181]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7011;
-  fra.me.meth = LOCATE_parser___ReduceAction178___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7011 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction178____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos181] = 1;
-  return;
-}
-void parser___ReduceAction179___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction200___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7015;
-  fra.me.meth = LOCATE_parser___ReduceAction179___action;
+  fra.me.line = 7554;
+  fra.me.meth = LOCATE_parser___ReduceAction200___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7017 */
+  /* parser/parser.nit:7556 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7018 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7019 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7020 */
-  fra.me.REG[4] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[3], NIT_NULL, fra.me.REG[4]);
-  /* ./parser//parser.nit:7025 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7026 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction179____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7557 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7558 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7559 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7560 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7561 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7563 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7563);
+  }
+  /* parser/parser.nit:7565 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7565);
   }
-  REGB0 = ATTR_parser___ReduceAction179____goto(fra.me.REG[0]);
+  /* parser/parser.nit:7566 */
+  fra.me.REG[6] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3], NIT_NULL, fra.me.REG[6]);
+  /* parser/parser.nit:7573 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:7574 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7574);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction179___init(val_t p0, val_t p1, int* init_table){
-  int itpos182 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction179].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos182]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7029;
-  fra.me.meth = LOCATE_parser___ReduceAction179___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7029 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction179____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos182] = 1;
-  return;
-}
-void parser___ReduceAction180___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction201___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7033;
-  fra.me.meth = LOCATE_parser___ReduceAction180___action;
+  fra.me.line = 7579;
+  fra.me.meth = LOCATE_parser___ReduceAction201___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7035 */
+  /* parser/parser.nit:7581 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7036 */
+  /* parser/parser.nit:7582 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7037 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7038 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7040 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7583 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7584 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7585 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7586 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7587 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7589 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7040);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7589);
   }
-  /* ./parser//parser.nit:7041 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:7042 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], NIT_NULL, fra.me.REG[5]);
-  /* ./parser//parser.nit:7047 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7048 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction180____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7591 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7591);
+  }
+  /* parser/parser.nit:7592 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:7594 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7594);
+  }
+  /* parser/parser.nit:7595 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3], NIT_NULL, fra.me.REG[7]);
+  /* parser/parser.nit:7602 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:7603 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7048);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7603);
   }
-  REGB0 = ATTR_parser___ReduceAction180____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction180___init(val_t p0, val_t p1, int* init_table){
-  int itpos183 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction180].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction202___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos183]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7051;
-  fra.me.meth = LOCATE_parser___ReduceAction180___init;
+  fra.me.line = 7608;
+  fra.me.meth = LOCATE_parser___ReduceAction202___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7051 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction180____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7610 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7611 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7612 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7613 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7614 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7615 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7616 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7618 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7618);
+  }
+  /* parser/parser.nit:7620 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7620);
+  }
+  /* parser/parser.nit:7622 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7622);
+  }
+  /* parser/parser.nit:7623 */
+  fra.me.REG[7] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[7]);
+  /* parser/parser.nit:7630 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:7631 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7631);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos183] = 1;
   return;
 }
-void parser___ReduceAction181___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction203___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7055;
-  fra.me.meth = LOCATE_parser___ReduceAction181___action;
+  fra.me.line = 7636;
+  fra.me.meth = LOCATE_parser___ReduceAction203___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   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.nit:7057 */
+  /* parser/parser.nit:7638 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7058 */
+  /* parser/parser.nit:7639 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7059 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7060 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7062 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7640 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7641 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7642 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7643 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:7644 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7645 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7647 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7647);
+  }
+  /* parser/parser.nit:7649 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7649);
+  }
+  /* parser/parser.nit:7650 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
+  fra.me.REG[7] = fra.me.REG[5];
+  /* parser/parser.nit:7652 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7652);
   }
-  /* ./parser//parser.nit:7063 */
-  fra.me.REG[5] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:7068 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7069 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction181____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7654 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7654);
+  }
+  /* parser/parser.nit:7655 */
+  fra.me.REG[8] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], fra.me.REG[8]);
+  /* parser/parser.nit:7662 */
+  fra.me.REG[2] = fra.me.REG[8];
+  /* parser/parser.nit:7663 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7069);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7663);
   }
-  REGB0 = ATTR_parser___ReduceAction181____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction181___init(val_t p0, val_t p1, int* init_table){
-  int itpos184 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction181].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction204___action(val_t p0, val_t p1){
+  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;
-  fra.me.line = 7072;
-  fra.me.meth = LOCATE_parser___ReduceAction181___init;
+  fra.me.line = 7668;
+  fra.me.meth = LOCATE_parser___ReduceAction204___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7072 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction181____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:7670 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:7671 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7672 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7673 */
+  fra.me.REG[4] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[3], NIT_NULL, NIT_NULL, fra.me.REG[4]);
+  /* parser/parser.nit:7680 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:7681 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7681);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos184] = 1;
   return;
 }
-void parser___ReduceAction182___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction205___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7076;
-  fra.me.meth = LOCATE_parser___ReduceAction182___action;
+  fra.me.line = 7686;
+  fra.me.meth = LOCATE_parser___ReduceAction205___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7078 */
+  /* parser/parser.nit:7688 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7079 */
+  /* parser/parser.nit:7689 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7080 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7081 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7082 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7084 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7084);
-  }
-  /* ./parser//parser.nit:7085 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
-  fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:7087 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7690 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7691 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7693 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7693);
   }
-  /* ./parser//parser.nit:7088 */
-  fra.me.REG[6] = NEW_ASignature_parser_prod___ASignature___init_asignature(fra.me.REG[5], fra.me.REG[3], fra.me.REG[6]);
-  /* ./parser//parser.nit:7093 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7094 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction182____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7694 */
+  fra.me.REG[5] = NEW_ASignature_parser___parser_prod___ASignature___init_asignature(NIT_NULL, fra.me.REG[4], NIT_NULL, fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:7701 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:7702 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7094);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7702);
   }
-  REGB0 = ATTR_parser___ReduceAction182____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction182___init(val_t p0, val_t p1, int* init_table){
-  int itpos185 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction182].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos185]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7097;
-  fra.me.meth = LOCATE_parser___ReduceAction182___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7097 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction182____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos185] = 1;
-  return;
-}
-void parser___ReduceAction183___action(val_t p0, val_t p1){
+void parser___ReduceAction206___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7101;
-  fra.me.meth = LOCATE_parser___ReduceAction183___action;
+  fra.me.line = 7707;
+  fra.me.meth = LOCATE_parser___ReduceAction206___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23668,21 +21996,15 @@ void parser___ReduceAction183___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7103 */
+  /* parser/parser.nit:7709 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7104 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7105 */
+  /* parser/parser.nit:7710 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7106 */
+  /* parser/parser.nit:7711 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7107 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7108 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7109 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7111 */
+  /* parser/parser.nit:7712 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7714 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23691,64 +22013,41 @@ void parser___ReduceAction183___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7112 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:7715 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7114 */
+  /* parser/parser.nit:7717 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7115 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction183____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7718 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7115);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7718);
   }
-  REGB0 = ATTR_parser___ReduceAction183____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction183___init(val_t p0, val_t p1, int* init_table){
-  int itpos186 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction183].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos186]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7118;
-  fra.me.meth = LOCATE_parser___ReduceAction183___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7118 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction183____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos186] = 1;
-  return;
-}
-void parser___ReduceAction184___action(val_t p0, val_t p1){
+void parser___ReduceAction207___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7122;
-  fra.me.meth = LOCATE_parser___ReduceAction184___action;
+  fra.me.line = 7723;
+  fra.me.meth = LOCATE_parser___ReduceAction207___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23757,29 +22056,23 @@ void parser___ReduceAction184___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7124 */
+  /* parser/parser.nit:7725 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7125 */
+  /* parser/parser.nit:7726 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7126 */
+  /* parser/parser.nit:7727 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7127 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7128 */
+  /* parser/parser.nit:7728 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7129 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7130 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7131 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7134 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7729 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7732 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7134);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7732);
   }
-  /* ./parser//parser.nit:7135 */
+  /* parser/parser.nit:7733 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -23788,130 +22081,43 @@ void parser___ReduceAction184___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7136 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:7734 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7138 */
+  /* parser/parser.nit:7736 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7139 */
+  /* parser/parser.nit:7737 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7140 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction184____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7140);
-  }
-  REGB0 = ATTR_parser___ReduceAction184____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction184___init(val_t p0, val_t p1, int* init_table){
-  int itpos187 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction184].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos187]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7143;
-  fra.me.meth = LOCATE_parser___ReduceAction184___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7143 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction184____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos187] = 1;
-  return;
-}
-void parser___ReduceAction185___action(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;
-  fra.me.line = 7147;
-  fra.me.meth = LOCATE_parser___ReduceAction185___action;
-  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.nit:7149 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7150 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7151 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7152 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7153 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7154 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7155 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction185____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7738 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7738);
   }
-  REGB0 = ATTR_parser___ReduceAction185____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction185___init(val_t p0, val_t p1, int* init_table){
-  int itpos188 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction185].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos188]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7158;
-  fra.me.meth = LOCATE_parser___ReduceAction185___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7158 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction185____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos188] = 1;
-  return;
-}
-void parser___ReduceAction186___action(val_t p0, val_t p1){
+void parser___ReduceAction208___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7162;
-  fra.me.meth = LOCATE_parser___ReduceAction186___action;
+  fra.me.line = 7743;
+  fra.me.meth = LOCATE_parser___ReduceAction208___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -23919,128 +22125,82 @@ void parser___ReduceAction186___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7164 */
+  /* parser/parser.nit:7745 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7165 */
+  /* parser/parser.nit:7746 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7166 */
+  /* parser/parser.nit:7747 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7167 */
+  /* parser/parser.nit:7748 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7169 */
+  /* parser/parser.nit:7750 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7170 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction186____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7751 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7170);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7751);
   }
-  REGB0 = ATTR_parser___ReduceAction186____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction186___init(val_t p0, val_t p1, int* init_table){
-  int itpos189 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction186].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos189]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7173;
-  fra.me.meth = LOCATE_parser___ReduceAction186___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7173 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction186____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos189] = 1;
-  return;
-}
-void parser___ReduceAction187___action(val_t p0, val_t p1){
+void parser___ReduceAction209___action(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;
-  fra.me.line = 7177;
-  fra.me.meth = LOCATE_parser___ReduceAction187___action;
+  fra.me.line = 7756;
+  fra.me.meth = LOCATE_parser___ReduceAction209___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7179 */
+  /* parser/parser.nit:7758 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7180 */
+  /* parser/parser.nit:7759 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7182 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7761 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7182);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7761);
   }
-  /* ./parser//parser.nit:7183 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:7188 */
+  /* parser/parser.nit:7762 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:7767 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7189 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction187____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7768 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7189);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7768);
   }
-  REGB0 = ATTR_parser___ReduceAction187____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction187___init(val_t p0, val_t p1, int* init_table){
-  int itpos190 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction187].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos190]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7192;
-  fra.me.meth = LOCATE_parser___ReduceAction187___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7192 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction187____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos190] = 1;
-  return;
-}
-void parser___ReduceAction188___action(val_t p0, val_t p1){
+void parser___ReduceAction210___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7196;
-  fra.me.meth = LOCATE_parser___ReduceAction188___action;
+  fra.me.line = 7773;
+  fra.me.meth = LOCATE_parser___ReduceAction210___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24048,74 +22208,51 @@ void parser___ReduceAction188___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7198 */
+  /* parser/parser.nit:7775 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7199 */
+  /* parser/parser.nit:7776 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7200 */
+  /* parser/parser.nit:7777 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7202 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7779 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7202);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7779);
   }
-  /* ./parser//parser.nit:7204 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7781 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7204);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7781);
   }
-  /* ./parser//parser.nit:7205 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7210 */
+  /* parser/parser.nit:7782 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7787 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7211 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction188____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7788 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7211);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7788);
   }
-  REGB0 = ATTR_parser___ReduceAction188____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction188___init(val_t p0, val_t p1, int* init_table){
-  int itpos191 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction188].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos191]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7214;
-  fra.me.meth = LOCATE_parser___ReduceAction188___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7214 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction188____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos191] = 1;
-  return;
-}
-void parser___ReduceAction189___action(val_t p0, val_t p1){
+void parser___ReduceAction211___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7218;
-  fra.me.meth = LOCATE_parser___ReduceAction189___action;
+  fra.me.line = 7793;
+  fra.me.meth = LOCATE_parser___ReduceAction211___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24124,82 +22261,59 @@ void parser___ReduceAction189___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7220 */
+  /* parser/parser.nit:7795 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7221 */
+  /* parser/parser.nit:7796 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7222 */
+  /* parser/parser.nit:7797 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7223 */
+  /* parser/parser.nit:7798 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7225 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7800 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7225);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7800);
   }
-  /* ./parser//parser.nit:7227 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:7802 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7227);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7802);
   }
-  /* ./parser//parser.nit:7229 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TDotdotdot, ID_TDotdotdot)) /*cast nullable TDotdotdot*/;
+  /* parser/parser.nit:7804 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TDotdotdot, ID_parser___parser_nodes___TDotdotdot)) /*cast nullable TDotdotdot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7229);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7804);
   }
-  /* ./parser//parser.nit:7230 */
-  fra.me.REG[3] = NEW_AParam_parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7235 */
+  /* parser/parser.nit:7805 */
+  fra.me.REG[3] = NEW_AParam_parser___parser_prod___AParam___init_aparam(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7810 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7236 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction189____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7811 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7236);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7811);
   }
-  REGB0 = ATTR_parser___ReduceAction189____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction189___init(val_t p0, val_t p1, int* init_table){
-  int itpos192 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction189].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos192]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7239;
-  fra.me.meth = LOCATE_parser___ReduceAction189___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7239 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction189____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos192] = 1;
-  return;
-}
-void parser___ReduceAction190___action(val_t p0, val_t p1){
+void parser___ReduceAction212___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7243;
-  fra.me.meth = LOCATE_parser___ReduceAction190___action;
+  fra.me.line = 7816;
+  fra.me.meth = LOCATE_parser___ReduceAction212___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24207,71 +22321,46 @@ void parser___ReduceAction190___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7245 */
+  /* parser/parser.nit:7818 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7246 */
+  /* parser/parser.nit:7819 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7247 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7248 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7250 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:7820 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:7822 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7250);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7822);
   }
-  /* ./parser//parser.nit:7251 */
+  /* parser/parser.nit:7823 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:7252 */
+  /* parser/parser.nit:7824 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7253 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction190____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7825 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7253);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7825);
   }
-  REGB0 = ATTR_parser___ReduceAction190____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction190___init(val_t p0, val_t p1, int* init_table){
-  int itpos193 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction190].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos193]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7256;
-  fra.me.meth = LOCATE_parser___ReduceAction190___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7256 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction190____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos193] = 1;
-  return;
-}
-void parser___ReduceAction191___action(val_t p0, val_t p1){
+void parser___ReduceAction213___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7260;
-  fra.me.meth = LOCATE_parser___ReduceAction191___action;
+  fra.me.line = 7830;
+  fra.me.meth = LOCATE_parser___ReduceAction213___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24280,84 +22369,61 @@ void parser___ReduceAction191___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7262 */
+  /* parser/parser.nit:7832 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7263 */
+  /* parser/parser.nit:7833 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7264 */
+  /* parser/parser.nit:7834 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7265 */
+  /* parser/parser.nit:7835 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7266 */
+  /* parser/parser.nit:7836 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7268 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7838 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7268);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7838);
   }
-  /* ./parser//parser.nit:7270 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7840 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7270);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7840);
   }
-  /* ./parser//parser.nit:7272 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7842 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7272);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7842);
   }
-  /* ./parser//parser.nit:7273 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7280 */
+  /* parser/parser.nit:7843 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7850 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7281 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction191____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7851 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7281);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7851);
   }
-  REGB0 = ATTR_parser___ReduceAction191____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction191___init(val_t p0, val_t p1, int* init_table){
-  int itpos194 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction191].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos194]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7284;
-  fra.me.meth = LOCATE_parser___ReduceAction191___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7284 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction191____goto(fra.me.REG[1]) = REGB0;
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos194] = 1;
   return;
 }
-void parser___ReduceAction192___action(val_t p0, val_t p1){
+void parser___ReduceAction214___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7288;
-  fra.me.meth = LOCATE_parser___ReduceAction192___action;
+  fra.me.line = 7856;
+  fra.me.meth = LOCATE_parser___ReduceAction214___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24367,92 +22433,69 @@ void parser___ReduceAction192___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7290 */
+  /* parser/parser.nit:7858 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7291 */
+  /* parser/parser.nit:7859 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7292 */
+  /* parser/parser.nit:7860 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7293 */
+  /* parser/parser.nit:7861 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7294 */
+  /* parser/parser.nit:7862 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7295 */
+  /* parser/parser.nit:7863 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7297 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:7865 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7297);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7865);
   }
-  /* ./parser//parser.nit:7299 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7299);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7867);
   }
-  /* ./parser//parser.nit:7301 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7869 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7301);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7869);
   }
-  /* ./parser//parser.nit:7303 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7871 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7303);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7871);
   }
-  /* ./parser//parser.nit:7304 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:7311 */
+  /* parser/parser.nit:7872 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:7879 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7312 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction192____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7880 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7312);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7880);
   }
-  REGB0 = ATTR_parser___ReduceAction192____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction192___init(val_t p0, val_t p1, int* init_table){
-  int itpos195 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction192].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos195]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7315;
-  fra.me.meth = LOCATE_parser___ReduceAction192___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7315 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction192____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos195] = 1;
-  return;
-}
-void parser___ReduceAction193___action(val_t p0, val_t p1){
+void parser___ReduceAction215___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7319;
-  fra.me.meth = LOCATE_parser___ReduceAction193___action;
+  fra.me.line = 7885;
+  fra.me.meth = LOCATE_parser___ReduceAction215___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24462,94 +22505,71 @@ void parser___ReduceAction193___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7321 */
+  /* parser/parser.nit:7887 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7322 */
+  /* parser/parser.nit:7888 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7323 */
+  /* parser/parser.nit:7889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7324 */
+  /* parser/parser.nit:7890 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7325 */
+  /* parser/parser.nit:7891 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7326 */
+  /* parser/parser.nit:7892 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7327 */
+  /* parser/parser.nit:7893 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7329 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7895 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7329);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7895);
   }
-  /* ./parser//parser.nit:7331 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7897 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7331);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7897);
   }
-  /* ./parser//parser.nit:7333 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7899 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7333);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7899);
   }
-  /* ./parser//parser.nit:7335 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:7901 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7335);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7901);
   }
-  /* ./parser//parser.nit:7336 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7343 */
+  /* parser/parser.nit:7902 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7909 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7344 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction193____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7910 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7344);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7910);
   }
-  REGB0 = ATTR_parser___ReduceAction193____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction193___init(val_t p0, val_t p1, int* init_table){
-  int itpos196 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction193].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos196]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7347;
-  fra.me.meth = LOCATE_parser___ReduceAction193___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7347 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction193____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos196] = 1;
-  return;
-}
-void parser___ReduceAction194___action(val_t p0, val_t p1){
+void parser___ReduceAction216___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7351;
-  fra.me.meth = LOCATE_parser___ReduceAction194___action;
+  fra.me.line = 7915;
+  fra.me.meth = LOCATE_parser___ReduceAction216___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24560,102 +22580,79 @@ void parser___ReduceAction194___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7353 */
+  /* parser/parser.nit:7917 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7354 */
+  /* parser/parser.nit:7918 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7355 */
+  /* parser/parser.nit:7919 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7356 */
+  /* parser/parser.nit:7920 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7357 */
+  /* parser/parser.nit:7921 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7358 */
+  /* parser/parser.nit:7922 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7359 */
+  /* parser/parser.nit:7923 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7360 */
+  /* parser/parser.nit:7924 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7362 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:7926 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7362);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7926);
   }
-  /* ./parser//parser.nit:7364 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7928 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7364);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7928);
   }
-  /* ./parser//parser.nit:7366 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7930 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7366);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7930);
   }
-  /* ./parser//parser.nit:7368 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7932 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7368);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7932);
   }
-  /* ./parser//parser.nit:7370 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:7934 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7370);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7934);
   }
-  /* ./parser//parser.nit:7371 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7378 */
+  /* parser/parser.nit:7935 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7942 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7379 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction194____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7943 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7379);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7943);
   }
-  REGB0 = ATTR_parser___ReduceAction194____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction194___init(val_t p0, val_t p1, int* init_table){
-  int itpos197 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction194].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos197]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7382;
-  fra.me.meth = LOCATE_parser___ReduceAction194___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7382 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction194____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos197] = 1;
-  return;
-}
-void parser___ReduceAction195___action(val_t p0, val_t p1){
+void parser___ReduceAction217___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7386;
-  fra.me.meth = LOCATE_parser___ReduceAction195___action;
+  fra.me.line = 7948;
+  fra.me.meth = LOCATE_parser___ReduceAction217___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24665,96 +22662,73 @@ void parser___ReduceAction195___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7388 */
+  /* parser/parser.nit:7950 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7389 */
+  /* parser/parser.nit:7951 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7390 */
+  /* parser/parser.nit:7952 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7391 */
+  /* parser/parser.nit:7953 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7392 */
+  /* parser/parser.nit:7954 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7393 */
+  /* parser/parser.nit:7955 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7394 */
+  /* parser/parser.nit:7956 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7395 */
+  /* parser/parser.nit:7957 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7397 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7959 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7959);
   }
-  /* ./parser//parser.nit:7399 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7961 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7961);
   }
-  /* ./parser//parser.nit:7401 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7963 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7401);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7963);
   }
-  /* ./parser//parser.nit:7403 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:7965 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7403);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7965);
   }
-  /* ./parser//parser.nit:7404 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7411 */
+  /* parser/parser.nit:7966 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(NIT_NULL, fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:7973 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7412 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction195____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:7974 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7412);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7974);
   }
-  REGB0 = ATTR_parser___ReduceAction195____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction195___init(val_t p0, val_t p1, int* init_table){
-  int itpos198 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction195].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos198]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7415;
-  fra.me.meth = LOCATE_parser___ReduceAction195___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7415 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction195____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos198] = 1;
-  return;
-}
-void parser___ReduceAction196___action(val_t p0, val_t p1){
+void parser___ReduceAction218___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7419;
-  fra.me.meth = LOCATE_parser___ReduceAction196___action;
+  fra.me.line = 7979;
+  fra.me.meth = LOCATE_parser___ReduceAction218___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24765,171 +22739,125 @@ void parser___ReduceAction196___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7421 */
+  /* parser/parser.nit:7981 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7422 */
+  /* parser/parser.nit:7982 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7423 */
+  /* parser/parser.nit:7983 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7424 */
+  /* parser/parser.nit:7984 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7425 */
+  /* parser/parser.nit:7985 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7426 */
+  /* parser/parser.nit:7986 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7427 */
+  /* parser/parser.nit:7987 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7428 */
+  /* parser/parser.nit:7988 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7429 */
+  /* parser/parser.nit:7989 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7431 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:7991 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7431);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7991);
   }
-  /* ./parser//parser.nit:7433 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:7993 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7433);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7993);
   }
-  /* ./parser//parser.nit:7435 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:7995 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7435);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7995);
   }
-  /* ./parser//parser.nit:7437 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ASignature, ID_ASignature)) /*cast nullable ASignature*/;
+  /* parser/parser.nit:7997 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ASignature, ID_parser___parser_nodes___ASignature)) /*cast nullable ASignature*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7437);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7997);
   }
-  /* ./parser//parser.nit:7439 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:7999 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7439);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 7999);
   }
-  /* ./parser//parser.nit:7440 */
-  fra.me.REG[3] = NEW_AClosureDecl_parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7447 */
+  /* parser/parser.nit:8000 */
+  fra.me.REG[3] = NEW_AClosureDecl_parser___parser_prod___AClosureDecl___init_aclosuredecl(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8007 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7448 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction196____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8008 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7448);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8008);
   }
-  REGB0 = ATTR_parser___ReduceAction196____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction196___init(val_t p0, val_t p1, int* init_table){
-  int itpos199 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction196].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos199]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7451;
-  fra.me.meth = LOCATE_parser___ReduceAction196___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7451 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction196____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos199] = 1;
-  return;
-}
-void parser___ReduceAction197___action(val_t p0, val_t p1){
+void parser___ReduceAction219___action(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;
-  fra.me.line = 7455;
-  fra.me.meth = LOCATE_parser___ReduceAction197___action;
+  fra.me.line = 8013;
+  fra.me.meth = LOCATE_parser___ReduceAction219___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7457 */
+  /* parser/parser.nit:8015 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7458 */
+  /* parser/parser.nit:8016 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7460 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8018 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7460);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8018);
   }
-  /* ./parser//parser.nit:7461 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:7465 */
+  /* parser/parser.nit:8019 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8023 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7466 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction197____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8024 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7466);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8024);
   }
-  REGB0 = ATTR_parser___ReduceAction197____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction197___init(val_t p0, val_t p1, int* init_table){
-  int itpos200 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction197].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos200]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7469;
-  fra.me.meth = LOCATE_parser___ReduceAction197___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7469 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction197____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos200] = 1;
-  return;
-}
-void parser___ReduceAction198___action(val_t p0, val_t p1){
+void parser___ReduceAction220___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7473;
-  fra.me.meth = LOCATE_parser___ReduceAction198___action;
+  fra.me.line = 8029;
+  fra.me.meth = LOCATE_parser___ReduceAction220___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -24938,29 +22866,29 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7475 */
+  /* parser/parser.nit:8031 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7476 */
+  /* parser/parser.nit:8032 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7477 */
+  /* parser/parser.nit:8033 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7478 */
+  /* parser/parser.nit:8034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7479 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7481 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:8035 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8037 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7481);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8037);
   }
-  /* ./parser//parser.nit:7483 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
+  /* parser/parser.nit:8039 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7483);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8039);
   }
-  /* ./parser//parser.nit:7484 */
+  /* parser/parser.nit:8040 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -24969,66 +22897,43 @@ void parser___ReduceAction198___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7485 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:8041 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7487 */
-  fra.me.REG[5] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7491 */
+  /* parser/parser.nit:8043 */
+  fra.me.REG[5] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:8047 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7492 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction198____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8048 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7492);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8048);
   }
-  REGB0 = ATTR_parser___ReduceAction198____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction198___init(val_t p0, val_t p1, int* init_table){
-  int itpos201 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction198].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos201]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7495;
-  fra.me.meth = LOCATE_parser___ReduceAction198___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7495 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction198____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos201] = 1;
-  return;
-}
-void parser___ReduceAction199___action(val_t p0, val_t p1){
+void parser___ReduceAction221___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7499;
-  fra.me.meth = LOCATE_parser___ReduceAction199___action;
+  fra.me.line = 8053;
+  fra.me.meth = LOCATE_parser___ReduceAction221___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25038,37 +22943,37 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7501 */
+  /* parser/parser.nit:8055 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7502 */
+  /* parser/parser.nit:8056 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7503 */
+  /* parser/parser.nit:8057 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7504 */
+  /* parser/parser.nit:8058 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7505 */
+  /* parser/parser.nit:8059 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7506 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7508 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwimport, ID_TKwimport)) /*cast nullable TKwimport*/;
+  /* parser/parser.nit:8060 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8062 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwimport, ID_parser___parser_nodes___TKwimport)) /*cast nullable TKwimport*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7508);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8062);
   }
-  /* ./parser//parser.nit:7510 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExternCall, ID_AExternCall)) /*cast nullable AExternCall*/;
+  /* parser/parser.nit:8064 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExternCall, ID_parser___parser_nodes___AExternCall)) /*cast nullable AExternCall*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8064);
   }
-  /* ./parser//parser.nit:7512 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8066 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8066);
   }
-  /* ./parser//parser.nit:7513 */
+  /* parser/parser.nit:8067 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -25077,68 +22982,45 @@ void parser___ReduceAction199___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7514 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
+    /* parser/parser.nit:8068 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7516 */
+  /* parser/parser.nit:8070 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:7517 */
-  fra.me.REG[6] = NEW_AExternCalls_parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:7521 */
+  /* parser/parser.nit:8071 */
+  fra.me.REG[6] = NEW_AExternCalls_parser___parser_prod___AExternCalls___init_aexterncalls(fra.me.REG[5], fra.me.REG[6]);
+  /* parser/parser.nit:8075 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7522 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction199____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8076 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7522);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8076);
   }
-  REGB0 = ATTR_parser___ReduceAction199____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction199___init(val_t p0, val_t p1, int* init_table){
-  int itpos202 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction199].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos202]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7525;
-  fra.me.meth = LOCATE_parser___ReduceAction199___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7525 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction199____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos202] = 1;
-  return;
-}
-void parser___ReduceAction200___action(val_t p0, val_t p1){
+void parser___ReduceAction222___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7529;
-  fra.me.meth = LOCATE_parser___ReduceAction200___action;
+  fra.me.line = 8081;
+  fra.me.meth = LOCATE_parser___ReduceAction222___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25146,252 +23028,160 @@ void parser___ReduceAction200___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7531 */
+  /* parser/parser.nit:8083 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7532 */
+  /* parser/parser.nit:8084 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7533 */
+  /* parser/parser.nit:8085 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7534 */
+  /* parser/parser.nit:8086 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7536 */
+  /* parser/parser.nit:8088 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7537 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction200____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8089 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7537);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8089);
   }
-  REGB0 = ATTR_parser___ReduceAction200____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction200___init(val_t p0, val_t p1, int* init_table){
-  int itpos203 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction200].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos203]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7540;
-  fra.me.meth = LOCATE_parser___ReduceAction200___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7540 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction200____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos203] = 1;
-  return;
-}
-void parser___ReduceAction201___action(val_t p0, val_t p1){
+void parser___ReduceAction223___action(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;
-  fra.me.line = 7544;
-  fra.me.meth = LOCATE_parser___ReduceAction201___action;
+  fra.me.line = 8094;
+  fra.me.meth = LOCATE_parser___ReduceAction223___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7546 */
+  /* parser/parser.nit:8096 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7547 */
+  /* parser/parser.nit:8097 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7549 */
+  /* parser/parser.nit:8099 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7550 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction201____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8100 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7550);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8100);
   }
-  REGB0 = ATTR_parser___ReduceAction201____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction201___init(val_t p0, val_t p1, int* init_table){
-  int itpos204 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction201].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos204]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7553;
-  fra.me.meth = LOCATE_parser___ReduceAction201___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7553 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction201____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos204] = 1;
-  return;
-}
-void parser___ReduceAction203___action(val_t p0, val_t p1){
+void parser___ReduceAction225___action(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;
-  fra.me.line = 7557;
-  fra.me.meth = LOCATE_parser___ReduceAction203___action;
+  fra.me.line = 8105;
+  fra.me.meth = LOCATE_parser___ReduceAction225___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7559 */
+  /* parser/parser.nit:8107 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7560 */
+  /* parser/parser.nit:8108 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7562 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:8110 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7562);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8110);
   }
-  /* ./parser//parser.nit:7563 */
-  fra.me.REG[3] = NEW_ASuperExternCall_parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7566 */
+  /* parser/parser.nit:8111 */
+  fra.me.REG[3] = NEW_ASuperExternCall_parser___parser_prod___ASuperExternCall___init_asuperexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:8114 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7567 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction203____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8115 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7567);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8115);
   }
-  REGB0 = ATTR_parser___ReduceAction203____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction203___init(val_t p0, val_t p1, int* init_table){
-  int itpos205 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction203].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos205]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7570;
-  fra.me.meth = LOCATE_parser___ReduceAction203___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7570 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction203____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos205] = 1;
-  return;
-}
-void parser___ReduceAction204___action(val_t p0, val_t p1){
+void parser___ReduceAction226___action(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;
-  fra.me.line = 7574;
-  fra.me.meth = LOCATE_parser___ReduceAction204___action;
+  fra.me.line = 8120;
+  fra.me.meth = LOCATE_parser___ReduceAction226___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7576 */
+  /* parser/parser.nit:8122 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7577 */
+  /* parser/parser.nit:8123 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7579 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:8125 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8125);
   }
-  /* ./parser//parser.nit:7580 */
-  fra.me.REG[3] = NEW_ALocalPropExternCall_parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7583 */
+  /* parser/parser.nit:8126 */
+  fra.me.REG[3] = NEW_ALocalPropExternCall_parser___parser_prod___ALocalPropExternCall___init_alocalpropexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:8129 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7584 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction204____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8130 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7584);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8130);
   }
-  REGB0 = ATTR_parser___ReduceAction204____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction204___init(val_t p0, val_t p1, int* init_table){
-  int itpos206 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction204].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 7587;
-  fra.me.meth = LOCATE_parser___ReduceAction204___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7587 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction204____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos206] = 1;
-  return;
-}
-void parser___ReduceAction205___action(val_t p0, val_t p1){
+void parser___ReduceAction227___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7591;
-  fra.me.meth = LOCATE_parser___ReduceAction205___action;
+  fra.me.line = 8135;
+  fra.me.meth = LOCATE_parser___ReduceAction227___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25400,148 +23190,102 @@ void parser___ReduceAction205___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7593 */
+  /* parser/parser.nit:8137 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7594 */
+  /* parser/parser.nit:8138 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7595 */
+  /* parser/parser.nit:8139 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7596 */
+  /* parser/parser.nit:8140 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7598 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8142 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7598);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8142);
   }
-  /* ./parser//parser.nit:7600 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TQuad, ID_TQuad)) /*cast nullable TQuad*/;
+  /* parser/parser.nit:8144 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7600);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8144);
   }
-  /* ./parser//parser.nit:7602 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AMethid, ID_AMethid)) /*cast nullable AMethid*/;
+  /* parser/parser.nit:8146 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AMethid, ID_parser___parser_nodes___AMethid)) /*cast nullable AMethid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7602);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8146);
   }
-  /* ./parser//parser.nit:7603 */
-  fra.me.REG[3] = NEW_AFullPropExternCall_parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7608 */
+  /* parser/parser.nit:8147 */
+  fra.me.REG[3] = NEW_AFullPropExternCall_parser___parser_prod___AFullPropExternCall___init_afullpropexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8152 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7609 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction205____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8153 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7609);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8153);
   }
-  REGB0 = ATTR_parser___ReduceAction205____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction205___init(val_t p0, val_t p1, int* init_table){
-  int itpos207 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction205].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos207]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7612;
-  fra.me.meth = LOCATE_parser___ReduceAction205___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7612 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction205____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos207] = 1;
-  return;
-}
-void parser___ReduceAction206___action(val_t p0, val_t p1){
+void parser___ReduceAction228___action(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;
-  fra.me.line = 7616;
-  fra.me.meth = LOCATE_parser___ReduceAction206___action;
+  fra.me.line = 8158;
+  fra.me.meth = LOCATE_parser___ReduceAction228___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7618 */
+  /* parser/parser.nit:8160 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7619 */
+  /* parser/parser.nit:8161 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7621 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8163 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7621);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8163);
   }
-  /* ./parser//parser.nit:7622 */
-  fra.me.REG[3] = NEW_AInitPropExternCall_parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
-  /* ./parser//parser.nit:7625 */
+  /* parser/parser.nit:8164 */
+  fra.me.REG[3] = NEW_AInitPropExternCall_parser___parser_prod___AInitPropExternCall___init_ainitpropexterncall(fra.me.REG[3]);
+  /* parser/parser.nit:8167 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7626 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction206____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8168 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7626);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8168);
   }
-  REGB0 = ATTR_parser___ReduceAction206____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction206___init(val_t p0, val_t p1, int* init_table){
-  int itpos208 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction206].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos208]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7629;
-  fra.me.meth = LOCATE_parser___ReduceAction206___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7629 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction206____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos208] = 1;
-  return;
-}
-void parser___ReduceAction207___action(val_t p0, val_t p1){
+void parser___ReduceAction229___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7633;
-  fra.me.meth = LOCATE_parser___ReduceAction207___action;
+  fra.me.line = 8173;
+  fra.me.meth = LOCATE_parser___ReduceAction229___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25550,92 +23294,69 @@ void parser___ReduceAction207___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7635 */
+  /* parser/parser.nit:8175 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7636 */
+  /* parser/parser.nit:8176 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7637 */
+  /* parser/parser.nit:8177 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7638 */
+  /* parser/parser.nit:8178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7639 */
+  /* parser/parser.nit:8179 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7640 */
+  /* parser/parser.nit:8180 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7641 */
+  /* parser/parser.nit:8181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7642 */
+  /* parser/parser.nit:8182 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7643 */
+  /* parser/parser.nit:8183 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7645 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:8185 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7645);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8185);
   }
-  /* ./parser//parser.nit:7647 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:8187 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7647);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8187);
   }
-  /* ./parser//parser.nit:7649 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:8189 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7649);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8189);
   }
-  /* ./parser//parser.nit:7650 */
-  fra.me.REG[3] = NEW_ACastAsExternCall_parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7655 */
+  /* parser/parser.nit:8190 */
+  fra.me.REG[3] = NEW_ACastAsExternCall_parser___parser_prod___ACastAsExternCall___init_acastasexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8195 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7656 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction207____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8196 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7656);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8196);
   }
-  REGB0 = ATTR_parser___ReduceAction207____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction207___init(val_t p0, val_t p1, int* init_table){
-  int itpos209 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction207].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos209]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7659;
-  fra.me.meth = LOCATE_parser___ReduceAction207___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7659 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction207____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos209] = 1;
-  return;
-}
-void parser___ReduceAction208___action(val_t p0, val_t p1){
+void parser___ReduceAction230___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7663;
-  fra.me.meth = LOCATE_parser___ReduceAction208___action;
+  fra.me.line = 8201;
+  fra.me.meth = LOCATE_parser___ReduceAction230___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25644,84 +23365,61 @@ void parser___ReduceAction208___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7665 */
+  /* parser/parser.nit:8203 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7666 */
+  /* parser/parser.nit:8204 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7667 */
+  /* parser/parser.nit:8205 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7668 */
+  /* parser/parser.nit:8206 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7669 */
+  /* parser/parser.nit:8207 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7671 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:8209 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7671);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8209);
   }
-  /* ./parser//parser.nit:7673 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:8211 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7673);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8211);
   }
-  /* ./parser//parser.nit:7675 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:8213 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7675);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8213);
   }
-  /* ./parser//parser.nit:7676 */
-  fra.me.REG[3] = NEW_AAsNullableExternCall_parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7681 */
+  /* parser/parser.nit:8214 */
+  fra.me.REG[3] = NEW_AAsNullableExternCall_parser___parser_prod___AAsNullableExternCall___init_aasnullableexterncall(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8219 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7682 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction208____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8220 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7682);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8220);
   }
-  REGB0 = ATTR_parser___ReduceAction208____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction208___init(val_t p0, val_t p1, int* init_table){
-  int itpos210 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction208].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos210]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7685;
-  fra.me.meth = LOCATE_parser___ReduceAction208___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7685 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction208____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos210] = 1;
-  return;
-}
-void parser___ReduceAction209___action(val_t p0, val_t p1){
+void parser___ReduceAction231___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7689;
-  fra.me.meth = LOCATE_parser___ReduceAction209___action;
+  fra.me.line = 8225;
+  fra.me.meth = LOCATE_parser___ReduceAction231___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25731,94 +23429,71 @@ void parser___ReduceAction209___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7691 */
+  /* parser/parser.nit:8227 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7692 */
+  /* parser/parser.nit:8228 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7693 */
+  /* parser/parser.nit:8229 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7694 */
+  /* parser/parser.nit:8230 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7695 */
+  /* parser/parser.nit:8231 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7696 */
+  /* parser/parser.nit:8232 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7697 */
+  /* parser/parser.nit:8233 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7699 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:8235 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8235);
   }
-  /* ./parser//parser.nit:7701 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:8237 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8237);
   }
-  /* ./parser//parser.nit:7703 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* parser/parser.nit:8239 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8239);
   }
-  /* ./parser//parser.nit:7705 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:8241 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7705);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8241);
   }
-  /* ./parser//parser.nit:7706 */
-  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:7712 */
+  /* parser/parser.nit:8242 */
+  fra.me.REG[3] = NEW_AAsNotNullableExternCall_parser___parser_prod___AAsNotNullableExternCall___init_aasnotnullableexterncall(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8248 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7713 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction209____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8249 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7713);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8249);
   }
-  REGB0 = ATTR_parser___ReduceAction209____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction209___init(val_t p0, val_t p1, int* init_table){
-  int itpos211 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction209].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos211]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7716;
-  fra.me.meth = LOCATE_parser___ReduceAction209___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7716 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction209____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos211] = 1;
-  return;
-}
-void parser___ReduceAction210___action(val_t p0, val_t p1){
+void parser___ReduceAction232___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7720;
-  fra.me.meth = LOCATE_parser___ReduceAction210___action;
+  fra.me.line = 8254;
+  fra.me.meth = LOCATE_parser___ReduceAction232___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25826,68 +23501,45 @@ void parser___ReduceAction210___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7722 */
+  /* parser/parser.nit:8256 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7723 */
+  /* parser/parser.nit:8257 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7724 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7726 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8258 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8260 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7726);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8260);
   }
-  /* ./parser//parser.nit:7727 */
-  fra.me.REG[4] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
-  /* ./parser//parser.nit:7732 */
+  /* parser/parser.nit:8261 */
+  fra.me.REG[4] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:8266 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7733 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction210____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8267 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7733);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8267);
   }
-  REGB0 = ATTR_parser___ReduceAction210____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction210___init(val_t p0, val_t p1, int* init_table){
-  int itpos212 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction210].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos212]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7736;
-  fra.me.meth = LOCATE_parser___ReduceAction210___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7736 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction210____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos212] = 1;
-  return;
-}
-void parser___ReduceAction211___action(val_t p0, val_t p1){
+void parser___ReduceAction233___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7740;
-  fra.me.meth = LOCATE_parser___ReduceAction211___action;
+  fra.me.line = 8272;
+  fra.me.meth = LOCATE_parser___ReduceAction233___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25896,76 +23548,53 @@ void parser___ReduceAction211___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7742 */
+  /* parser/parser.nit:8274 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7743 */
+  /* parser/parser.nit:8275 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7744 */
+  /* parser/parser.nit:8276 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7745 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7747 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:8277 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8279 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7747);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8279);
   }
-  /* ./parser//parser.nit:7749 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8281 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7749);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8281);
   }
-  /* ./parser//parser.nit:7750 */
-  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
-  /* ./parser//parser.nit:7755 */
+  /* parser/parser.nit:8282 */
+  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:8287 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7756 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction211____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8288 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7756);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8288);
   }
-  REGB0 = ATTR_parser___ReduceAction211____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction211___init(val_t p0, val_t p1, int* init_table){
-  int itpos213 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction211].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos213]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7759;
-  fra.me.meth = LOCATE_parser___ReduceAction211___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7759 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction211____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos213] = 1;
-  return;
-}
-void parser___ReduceAction212___action(val_t p0, val_t p1){
+void parser___ReduceAction234___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7763;
-  fra.me.meth = LOCATE_parser___ReduceAction212___action;
+  fra.me.line = 8293;
+  fra.me.meth = LOCATE_parser___ReduceAction234___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -25974,87 +23603,64 @@ void parser___ReduceAction212___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7765 */
+  /* parser/parser.nit:8295 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7766 */
+  /* parser/parser.nit:8296 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7767 */
+  /* parser/parser.nit:8297 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7768 */
+  /* parser/parser.nit:8298 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7769 */
+  /* parser/parser.nit:8299 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7770 */
+  /* parser/parser.nit:8300 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7771 */
+  /* parser/parser.nit:8301 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7772 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7774 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8302 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8304 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8304);
   }
-  /* ./parser//parser.nit:7776 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8306 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7776);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8306);
   }
-  /* ./parser//parser.nit:7777 */
+  /* parser/parser.nit:8307 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7778 */
-  fra.me.REG[5] = NEW_AType_parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:7783 */
+  /* parser/parser.nit:8308 */
+  fra.me.REG[5] = NEW_AType_parser___parser_prod___AType___init_atype(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
+  /* parser/parser.nit:8313 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7784 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction212____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8314 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7784);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8314);
   }
-  REGB0 = ATTR_parser___ReduceAction212____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction212___init(val_t p0, val_t p1, int* init_table){
-  int itpos214 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction212].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos214]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7787;
-  fra.me.meth = LOCATE_parser___ReduceAction212___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7787 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction212____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos214] = 1;
-  return;
-}
-void parser___ReduceAction213___action(val_t p0, val_t p1){
+void parser___ReduceAction235___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7791;
-  fra.me.meth = LOCATE_parser___ReduceAction213___action;
+  fra.me.line = 8319;
+  fra.me.meth = LOCATE_parser___ReduceAction235___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26064,96 +23670,73 @@ void parser___ReduceAction213___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7793 */
+  /* parser/parser.nit:8321 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7794 */
+  /* parser/parser.nit:8322 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7795 */
+  /* parser/parser.nit:8323 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7796 */
+  /* parser/parser.nit:8324 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7797 */
+  /* parser/parser.nit:8325 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7798 */
+  /* parser/parser.nit:8326 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7799 */
+  /* parser/parser.nit:8327 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7800 */
+  /* parser/parser.nit:8328 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7801 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7803 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnullable, ID_TKwnullable)) /*cast nullable TKwnullable*/;
+  /* parser/parser.nit:8329 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8331 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnullable, ID_parser___parser_nodes___TKwnullable)) /*cast nullable TKwnullable*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7803);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8331);
   }
-  /* ./parser//parser.nit:7805 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:8333 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8333);
   }
-  /* ./parser//parser.nit:7807 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8335 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8335);
   }
-  /* ./parser//parser.nit:7808 */
+  /* parser/parser.nit:8336 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
   fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:7809 */
-  fra.me.REG[6] = NEW_AType_parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:7814 */
+  /* parser/parser.nit:8337 */
+  fra.me.REG[6] = NEW_AType_parser___parser_prod___AType___init_atype(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:8342 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:7815 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction213____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8343 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7815);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8343);
   }
-  REGB0 = ATTR_parser___ReduceAction213____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction213___init(val_t p0, val_t p1, int* init_table){
-  int itpos215 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction213].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos215]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7818;
-  fra.me.meth = LOCATE_parser___ReduceAction213___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7818 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction213____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos215] = 1;
-  return;
-}
-void parser___ReduceAction214___action(val_t p0, val_t p1){
+void parser___ReduceAction236___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7822;
-  fra.me.meth = LOCATE_parser___ReduceAction214___action;
+  fra.me.line = 8348;
+  fra.me.meth = LOCATE_parser___ReduceAction236___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26161,13 +23744,13 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7824 */
+  /* parser/parser.nit:8350 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7825 */
+  /* parser/parser.nit:8351 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7826 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7828 */
+  /* parser/parser.nit:8352 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8354 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26176,64 +23759,41 @@ void parser___ReduceAction214___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7829 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:8355 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7831 */
+  /* parser/parser.nit:8357 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7832 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction214____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8358 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7832);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8358);
   }
-  REGB0 = ATTR_parser___ReduceAction214____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction214___init(val_t p0, val_t p1, int* init_table){
-  int itpos216 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction214].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;
-  fra.me.line = 7835;
-  fra.me.meth = LOCATE_parser___ReduceAction214___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7835 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction214____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos216] = 1;
-  return;
-}
-void parser___ReduceAction215___action(val_t p0, val_t p1){
+void parser___ReduceAction237___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7839;
-  fra.me.meth = LOCATE_parser___ReduceAction215___action;
+  fra.me.line = 8363;
+  fra.me.meth = LOCATE_parser___ReduceAction237___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26242,21 +23802,21 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7841 */
+  /* parser/parser.nit:8365 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7842 */
+  /* parser/parser.nit:8366 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7843 */
+  /* parser/parser.nit:8367 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7844 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7847 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8368 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8371 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7847);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8371);
   }
-  /* ./parser//parser.nit:7848 */
+  /* parser/parser.nit:8372 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26265,129 +23825,43 @@ void parser___ReduceAction215___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7849 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:8373 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7851 */
+  /* parser/parser.nit:8375 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7852 */
+  /* parser/parser.nit:8376 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7853 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction215____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7853);
-  }
-  REGB0 = ATTR_parser___ReduceAction215____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction215___init(val_t p0, val_t p1, int* init_table){
-  int itpos217 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction215].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos217]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7856;
-  fra.me.meth = LOCATE_parser___ReduceAction215___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7856 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction215____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos217] = 1;
-  return;
-}
-void parser___ReduceAction216___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7860;
-  fra.me.meth = LOCATE_parser___ReduceAction216___action;
-  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.nit:7862 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7863 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7864 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7865 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7867 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7868 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction216____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8377 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8377);
   }
-  REGB0 = ATTR_parser___ReduceAction216____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction216___init(val_t p0, val_t p1, int* init_table){
-  int itpos218 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction216].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos218]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7871;
-  fra.me.meth = LOCATE_parser___ReduceAction216___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7871 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction216____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos218] = 1;
-  return;
-}
-void parser___ReduceAction218___action(val_t p0, val_t p1){
+void parser___ReduceAction238___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7875;
-  fra.me.meth = LOCATE_parser___ReduceAction218___action;
+  fra.me.line = 8382;
+  fra.me.meth = LOCATE_parser___ReduceAction238___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26395,247 +23869,207 @@ void parser___ReduceAction218___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7877 */
+  /* parser/parser.nit:8384 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7878 */
+  /* parser/parser.nit:8385 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7879 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7880 */
+  /* parser/parser.nit:8386 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7882 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7883 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction218____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7883);
-  }
-  REGB0 = ATTR_parser___ReduceAction218____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction218___init(val_t p0, val_t p1, int* init_table){
-  int itpos219 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction218].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos219]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7886;
-  fra.me.meth = LOCATE_parser___ReduceAction218___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7886 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction218____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos219] = 1;
-  return;
-}
-void parser___ReduceAction219___action(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;
-  fra.me.line = 7890;
-  fra.me.meth = LOCATE_parser___ReduceAction219___action;
-  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.nit:7892 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7893 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7894 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7895 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7896 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7899 */
+  /* parser/parser.nit:8387 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8389 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7900 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction219____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8390 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8390);
   }
-  REGB0 = ATTR_parser___ReduceAction219____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction219___init(val_t p0, val_t p1, int* init_table){
-  int itpos220 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction219].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction240___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} 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;
-  fra.me.line = 7903;
-  fra.me.meth = LOCATE_parser___ReduceAction219___init;
+  fra.me.line = 8395;
+  fra.me.meth = LOCATE_parser___ReduceAction240___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7903 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction219____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:8397 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:8398 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8399 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8401 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8402 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8402);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos220] = 1;
   return;
 }
-void parser___ReduceAction220___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction241___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7907;
-  fra.me.meth = LOCATE_parser___ReduceAction220___action;
+  fra.me.line = 8407;
+  fra.me.meth = LOCATE_parser___ReduceAction241___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7909 */
+  /* parser/parser.nit:8409 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7910 */
+  /* parser/parser.nit:8410 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7911 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7912 */
-  fra.me.REG[3] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:7915 */
+  /* parser/parser.nit:8411 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8412 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8414 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8414);
+  }
+  /* parser/parser.nit:8415 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8419 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7916 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction220____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8420 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7916);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8420);
   }
-  REGB0 = ATTR_parser___ReduceAction220____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction220___init(val_t p0, val_t p1, int* init_table){
-  int itpos221 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction220].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction242___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos221]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7919;
-  fra.me.meth = LOCATE_parser___ReduceAction220___init;
+  fra.me.line = 8425;
+  fra.me.meth = LOCATE_parser___ReduceAction242___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7919 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction220____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:8427 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:8428 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8429 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8431 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8431);
+  }
+  /* parser/parser.nit:8432 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8436 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8437 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8437);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos221] = 1;
   return;
 }
-void parser___ReduceAction221___action(val_t p0, val_t p1){
+void parser___ReduceAction243___action(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;
-  fra.me.line = 7923;
-  fra.me.meth = LOCATE_parser___ReduceAction221___action;
+  fra.me.line = 8442;
+  fra.me.meth = LOCATE_parser___ReduceAction243___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7925 */
+  /* parser/parser.nit:8444 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7926 */
+  /* parser/parser.nit:8445 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7928 */
+  /* parser/parser.nit:8447 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:7929 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction221____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8448 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7929);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8448);
   }
-  REGB0 = ATTR_parser___ReduceAction221____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction221___init(val_t p0, val_t p1, int* init_table){
-  int itpos222 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction221].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos222]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7932;
-  fra.me.meth = LOCATE_parser___ReduceAction221___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7932 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction221____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos222] = 1;
-  return;
-}
-void parser___ReduceAction222___action(val_t p0, val_t p1){
+void parser___ReduceAction244___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7936;
-  fra.me.meth = LOCATE_parser___ReduceAction222___action;
+  fra.me.line = 8453;
+  fra.me.meth = LOCATE_parser___ReduceAction244___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26643,19 +24077,19 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7938 */
+  /* parser/parser.nit:8455 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7939 */
+  /* parser/parser.nit:8456 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7940 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7942 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8457 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8459 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7942);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8459);
   }
-  /* ./parser//parser.nit:7943 */
+  /* parser/parser.nit:8460 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26664,66 +24098,43 @@ void parser___ReduceAction222___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7944 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:8461 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7946 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7949 */
+  /* parser/parser.nit:8463 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:8467 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7950 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction222____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8468 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7950);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8468);
   }
-  REGB0 = ATTR_parser___ReduceAction222____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction222___init(val_t p0, val_t p1, int* init_table){
-  int itpos223 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction222].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos223]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 7953;
-  fra.me.meth = LOCATE_parser___ReduceAction222___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7953 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction222____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos223] = 1;
-  return;
-}
-void parser___ReduceAction223___action(val_t p0, val_t p1){
+void parser___ReduceAction245___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7957;
-  fra.me.meth = LOCATE_parser___ReduceAction223___action;
+  fra.me.line = 8473;
+  fra.me.meth = LOCATE_parser___ReduceAction245___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26732,27 +24143,27 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7959 */
+  /* parser/parser.nit:8475 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7960 */
+  /* parser/parser.nit:8476 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7961 */
+  /* parser/parser.nit:8477 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7962 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7964 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8478 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8480 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7964);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8480);
   }
-  /* ./parser//parser.nit:7966 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8482 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7966);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8482);
   }
-  /* ./parser//parser.nit:7967 */
+  /* parser/parser.nit:8483 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26761,69 +24172,46 @@ void parser___ReduceAction223___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7968 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:8484 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:7970 */
+  /* parser/parser.nit:8486 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:7971 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:7974 */
+  /* parser/parser.nit:8487 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:8491 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:7975 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction223____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8492 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7975);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8492);
   }
-  REGB0 = ATTR_parser___ReduceAction223____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction223___init(val_t p0, val_t p1, int* init_table){
-  int itpos224 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction223].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;
-  fra.me.line = 7978;
-  fra.me.meth = LOCATE_parser___ReduceAction223___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:7978 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction223____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos224] = 1;
-  return;
-}
-void parser___ReduceAction224___action(val_t p0, val_t p1){
+void parser___ReduceAction246___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 7982;
-  fra.me.meth = LOCATE_parser___ReduceAction224___action;
+  fra.me.line = 8497;
+  fra.me.meth = LOCATE_parser___ReduceAction246___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26831,21 +24219,21 @@ void parser___ReduceAction224___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:7984 */
+  /* parser/parser.nit:8499 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:7985 */
+  /* parser/parser.nit:8500 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7986 */
+  /* parser/parser.nit:8501 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:7987 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:7989 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8502 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8504 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 7989);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8504);
   }
-  /* ./parser//parser.nit:7990 */
+  /* parser/parser.nit:8505 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26854,66 +24242,43 @@ void parser___ReduceAction224___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:7991 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:8506 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:7993 */
-  fra.me.REG[4] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:7996 */
+  /* parser/parser.nit:8508 */
+  fra.me.REG[4] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:8512 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:7997 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction224____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8513 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 7997);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8513);
   }
-  REGB0 = ATTR_parser___ReduceAction224____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction224___init(val_t p0, val_t p1, int* init_table){
-  int itpos225 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction224].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos225]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8000;
-  fra.me.meth = LOCATE_parser___ReduceAction224___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8000 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction224____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos225] = 1;
-  return;
-}
-void parser___ReduceAction225___action(val_t p0, val_t p1){
+void parser___ReduceAction247___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8004;
-  fra.me.meth = LOCATE_parser___ReduceAction225___action;
+  fra.me.line = 8518;
+  fra.me.meth = LOCATE_parser___ReduceAction247___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -26922,29 +24287,29 @@ void parser___ReduceAction225___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8006 */
+  /* parser/parser.nit:8520 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8007 */
+  /* parser/parser.nit:8521 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8008 */
+  /* parser/parser.nit:8522 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8009 */
+  /* parser/parser.nit:8523 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8010 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8012 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8524 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8526 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8012);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8526);
   }
-  /* ./parser//parser.nit:8014 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8528 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8528);
   }
-  /* ./parser//parser.nit:8015 */
+  /* parser/parser.nit:8529 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -26953,195 +24318,252 @@ void parser___ReduceAction225___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8016 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:8530 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:8018 */
+  /* parser/parser.nit:8532 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8019 */
-  fra.me.REG[5] = NEW_ABlockExpr_parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:8022 */
+  /* parser/parser.nit:8533 */
+  fra.me.REG[5] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], NIT_NULL);
+  /* parser/parser.nit:8537 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8023 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction225____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8538 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8023);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8538);
   }
-  REGB0 = ATTR_parser___ReduceAction225____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction225___init(val_t p0, val_t p1, int* init_table){
-  int itpos226 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction225].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos226]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8026;
-  fra.me.meth = LOCATE_parser___ReduceAction225___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8026 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction225____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos226] = 1;
-  return;
-}
-void parser___ReduceAction226___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction248___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8030;
-  fra.me.meth = LOCATE_parser___ReduceAction226___action;
+  fra.me.line = 8543;
+  fra.me.meth = LOCATE_parser___ReduceAction248___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8032 */
+  /* parser/parser.nit:8545 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8033 */
+  /* parser/parser.nit:8546 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8034 */
+  /* parser/parser.nit:8547 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8548 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8036 */
+  /* parser/parser.nit:8549 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8551 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8551);
+  }
+  /* parser/parser.nit:8552 */
+  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_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:8553 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:8556 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8556);
+  }
+  /* parser/parser.nit:8557 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:8561 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8037 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction226____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8562 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8562);
   }
-  REGB0 = ATTR_parser___ReduceAction226____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction226___init(val_t p0, val_t p1, int* init_table){
-  int itpos227 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction226].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction249___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos227]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8040;
-  fra.me.meth = LOCATE_parser___ReduceAction226___init;
+  fra.me.line = 8567;
+  fra.me.meth = LOCATE_parser___ReduceAction249___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8040 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction226____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:8569 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:8570 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8571 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8572 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8573 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8574 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8576 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8576);
+  }
+  /* parser/parser.nit:8578 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8578);
+  }
+  /* parser/parser.nit:8579 */
+  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_standard___kernel___Object_____eqeq(fra.me.REG[5])(fra.me.REG[5], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:8580 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[5]);
+  }
+  /* parser/parser.nit:8582 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:8584 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwend, ID_parser___parser_nodes___TKwend)) /*cast nullable TKwend*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8584);
+  }
+  /* parser/parser.nit:8585 */
+  fra.me.REG[3] = NEW_ABlockExpr_parser___parser_prod___ABlockExpr___init_ablockexpr(fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:8589 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8590 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8590);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos227] = 1;
   return;
 }
-void parser___ReduceAction229___action(val_t p0, val_t p1){
+void parser___ReduceAction253___action(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;
-  fra.me.line = 8044;
-  fra.me.meth = LOCATE_parser___ReduceAction229___action;
+  fra.me.line = 8595;
+  fra.me.meth = LOCATE_parser___ReduceAction253___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8046 */
+  /* parser/parser.nit:8597 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8047 */
+  /* parser/parser.nit:8598 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8049 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
+  /* parser/parser.nit:8600 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8049);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8600);
   }
-  /* ./parser//parser.nit:8050 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8054 */
+  /* parser/parser.nit:8601 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8605 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8055 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction229____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8606 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8055);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8606);
   }
-  REGB0 = ATTR_parser___ReduceAction229____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction229___init(val_t p0, val_t p1, int* init_table){
-  int itpos228 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction229].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos228]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8058;
-  fra.me.meth = LOCATE_parser___ReduceAction229___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8058 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction229____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos228] = 1;
-  return;
-}
-void parser___ReduceAction230___action(val_t p0, val_t p1){
+void parser___ReduceAction254___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8062;
-  fra.me.meth = LOCATE_parser___ReduceAction230___action;
+  fra.me.line = 8611;
+  fra.me.meth = LOCATE_parser___ReduceAction254___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27149,140 +24571,94 @@ void parser___ReduceAction230___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8064 */
+  /* parser/parser.nit:8613 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8065 */
+  /* parser/parser.nit:8614 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8066 */
+  /* parser/parser.nit:8615 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8068 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwreturn, ID_TKwreturn)) /*cast nullable TKwreturn*/;
+  /* parser/parser.nit:8617 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwreturn, ID_parser___parser_nodes___TKwreturn)) /*cast nullable TKwreturn*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8068);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8617);
   }
-  /* ./parser//parser.nit:8070 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8619 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8070);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8619);
   }
-  /* ./parser//parser.nit:8071 */
-  fra.me.REG[3] = NEW_AReturnExpr_parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8075 */
+  /* parser/parser.nit:8620 */
+  fra.me.REG[3] = NEW_AReturnExpr_parser___parser_prod___AReturnExpr___init_areturnexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8624 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8076 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction230____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8625 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8076);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8625);
   }
-  REGB0 = ATTR_parser___ReduceAction230____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction230___init(val_t p0, val_t p1, int* init_table){
-  int itpos229 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction230].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos229]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8079;
-  fra.me.meth = LOCATE_parser___ReduceAction230___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8079 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction230____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos229] = 1;
-  return;
-}
-void parser___ReduceAction231___action(val_t p0, val_t p1){
+void parser___ReduceAction255___action(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;
-  fra.me.line = 8083;
-  fra.me.meth = LOCATE_parser___ReduceAction231___action;
+  fra.me.line = 8630;
+  fra.me.meth = LOCATE_parser___ReduceAction255___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8085 */
+  /* parser/parser.nit:8632 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8086 */
+  /* parser/parser.nit:8633 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8088 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:8635 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8088);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8635);
   }
-  /* ./parser//parser.nit:8089 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8094 */
+  /* parser/parser.nit:8636 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8641 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8095 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction231____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8642 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8095);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8642);
   }
-  REGB0 = ATTR_parser___ReduceAction231____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction231___init(val_t p0, val_t p1, int* init_table){
-  int itpos230 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction231].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;
-  fra.me.line = 8098;
-  fra.me.meth = LOCATE_parser___ReduceAction231___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8098 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction231____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos230] = 1;
-  return;
-}
-void parser___ReduceAction232___action(val_t p0, val_t p1){
+void parser___ReduceAction256___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8102;
-  fra.me.meth = LOCATE_parser___ReduceAction232___action;
+  fra.me.line = 8647;
+  fra.me.meth = LOCATE_parser___ReduceAction256___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27290,74 +24666,51 @@ void parser___ReduceAction232___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8104 */
+  /* parser/parser.nit:8649 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8105 */
+  /* parser/parser.nit:8650 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8106 */
+  /* parser/parser.nit:8651 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8108 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:8653 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8108);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8653);
   }
-  /* ./parser//parser.nit:8110 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:8655 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8110);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8655);
   }
-  /* ./parser//parser.nit:8111 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8116 */
+  /* parser/parser.nit:8656 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8661 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8117 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction232____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8662 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8117);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8662);
   }
-  REGB0 = ATTR_parser___ReduceAction232____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction232___init(val_t p0, val_t p1, int* init_table){
-  int itpos231 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction232].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos231]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8120;
-  fra.me.meth = LOCATE_parser___ReduceAction232___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8120 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction232____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos231] = 1;
-  return;
-}
-void parser___ReduceAction233___action(val_t p0, val_t p1){
+void parser___ReduceAction257___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8124;
-  fra.me.meth = LOCATE_parser___ReduceAction233___action;
+  fra.me.line = 8667;
+  fra.me.meth = LOCATE_parser___ReduceAction257___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27365,74 +24718,51 @@ void parser___ReduceAction233___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8126 */
+  /* parser/parser.nit:8669 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8127 */
+  /* parser/parser.nit:8670 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8128 */
+  /* parser/parser.nit:8671 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8130 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:8673 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8130);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8673);
   }
-  /* ./parser//parser.nit:8132 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8675 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8132);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8675);
   }
-  /* ./parser//parser.nit:8133 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8138 */
+  /* parser/parser.nit:8676 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8681 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8139 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction233____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8682 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8139);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8682);
   }
-  REGB0 = ATTR_parser___ReduceAction233____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction233___init(val_t p0, val_t p1, int* init_table){
-  int itpos232 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction233].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 8142;
-  fra.me.meth = LOCATE_parser___ReduceAction233___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8142 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction233____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos232] = 1;
-  return;
-}
-void parser___ReduceAction234___action(val_t p0, val_t p1){
+void parser___ReduceAction258___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8146;
-  fra.me.meth = LOCATE_parser___ReduceAction234___action;
+  fra.me.line = 8687;
+  fra.me.meth = LOCATE_parser___ReduceAction258___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27441,214 +24771,145 @@ void parser___ReduceAction234___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8148 */
+  /* parser/parser.nit:8689 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8149 */
+  /* parser/parser.nit:8690 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8150 */
+  /* parser/parser.nit:8691 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8151 */
+  /* parser/parser.nit:8692 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8153 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:8694 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8694);
   }
-  /* ./parser//parser.nit:8155 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:8696 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8155);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8696);
   }
-  /* ./parser//parser.nit:8157 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8698 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8157);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8698);
   }
-  /* ./parser//parser.nit:8158 */
-  fra.me.REG[3] = NEW_ABreakExpr_parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8163 */
+  /* parser/parser.nit:8699 */
+  fra.me.REG[3] = NEW_ABreakExpr_parser___parser_prod___ABreakExpr___init_abreakexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8704 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8164 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction234____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8705 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8164);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8705);
   }
-  REGB0 = ATTR_parser___ReduceAction234____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction234___init(val_t p0, val_t p1, int* init_table){
-  int itpos233 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction234].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos233]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8167;
-  fra.me.meth = LOCATE_parser___ReduceAction234___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8167 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction234____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos233] = 1;
-  return;
-}
-void parser___ReduceAction235___action(val_t p0, val_t p1){
+void parser___ReduceAction259___action(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;
-  fra.me.line = 8171;
-  fra.me.meth = LOCATE_parser___ReduceAction235___action;
+  fra.me.line = 8710;
+  fra.me.meth = LOCATE_parser___ReduceAction259___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8173 */
+  /* parser/parser.nit:8712 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8174 */
+  /* parser/parser.nit:8713 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8176 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwabort, ID_TKwabort)) /*cast nullable TKwabort*/;
+  /* parser/parser.nit:8715 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwabort, ID_parser___parser_nodes___TKwabort)) /*cast nullable TKwabort*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8176);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8715);
   }
-  /* ./parser//parser.nit:8177 */
-  fra.me.REG[3] = NEW_AAbortExpr_parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:8180 */
+  /* parser/parser.nit:8716 */
+  fra.me.REG[3] = NEW_AAbortExpr_parser___parser_prod___AAbortExpr___init_aabortexpr(fra.me.REG[3]);
+  /* parser/parser.nit:8719 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8181 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction235____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8720 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8181);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8720);
   }
-  REGB0 = ATTR_parser___ReduceAction235____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction235___init(val_t p0, val_t p1, int* init_table){
-  int itpos234 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction235].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos234]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8184;
-  fra.me.meth = LOCATE_parser___ReduceAction235___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8184 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction235____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos234] = 1;
-  return;
-}
-void parser___ReduceAction236___action(val_t p0, val_t p1){
+void parser___ReduceAction260___action(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;
-  fra.me.line = 8188;
-  fra.me.meth = LOCATE_parser___ReduceAction236___action;
+  fra.me.line = 8725;
+  fra.me.meth = LOCATE_parser___ReduceAction260___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8190 */
+  /* parser/parser.nit:8727 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8191 */
+  /* parser/parser.nit:8728 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8193 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:8730 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8193);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8730);
   }
-  /* ./parser//parser.nit:8194 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8199 */
+  /* parser/parser.nit:8731 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:8736 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8200 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction236____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8737 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8737);
   }
-  REGB0 = ATTR_parser___ReduceAction236____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction236___init(val_t p0, val_t p1, int* init_table){
-  int itpos235 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction236].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos235]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8203;
-  fra.me.meth = LOCATE_parser___ReduceAction236___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8203 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction236____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos235] = 1;
-  return;
-}
-void parser___ReduceAction237___action(val_t p0, val_t p1){
+void parser___ReduceAction261___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8207;
-  fra.me.meth = LOCATE_parser___ReduceAction237___action;
+  fra.me.line = 8742;
+  fra.me.meth = LOCATE_parser___ReduceAction261___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27656,74 +24917,51 @@ void parser___ReduceAction237___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8209 */
+  /* parser/parser.nit:8744 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8210 */
+  /* parser/parser.nit:8745 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8211 */
+  /* parser/parser.nit:8746 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8213 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:8748 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8748);
   }
-  /* ./parser//parser.nit:8215 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:8750 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8750);
   }
-  /* ./parser//parser.nit:8216 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8221 */
+  /* parser/parser.nit:8751 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:8756 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8222 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction237____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8757 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8222);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8757);
   }
-  REGB0 = ATTR_parser___ReduceAction237____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction237___init(val_t p0, val_t p1, int* init_table){
-  int itpos236 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction237].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos236]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8225;
-  fra.me.meth = LOCATE_parser___ReduceAction237___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8225 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction237____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos236] = 1;
-  return;
-}
-void parser___ReduceAction238___action(val_t p0, val_t p1){
+void parser___ReduceAction262___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8229;
-  fra.me.meth = LOCATE_parser___ReduceAction238___action;
+  fra.me.line = 8762;
+  fra.me.meth = LOCATE_parser___ReduceAction262___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27731,74 +24969,51 @@ void parser___ReduceAction238___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8231 */
+  /* parser/parser.nit:8764 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8232 */
+  /* parser/parser.nit:8765 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8233 */
+  /* parser/parser.nit:8766 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8235 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:8768 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8235);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8768);
   }
-  /* ./parser//parser.nit:8237 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8770 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8237);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8770);
   }
-  /* ./parser//parser.nit:8238 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8243 */
+  /* parser/parser.nit:8771 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:8776 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8244 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction238____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8777 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8777);
   }
-  REGB0 = ATTR_parser___ReduceAction238____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction238___init(val_t p0, val_t p1, int* init_table){
-  int itpos237 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction238].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos237]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8247;
-  fra.me.meth = LOCATE_parser___ReduceAction238___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8247 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction238____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos237] = 1;
-  return;
-}
-void parser___ReduceAction239___action(val_t p0, val_t p1){
+void parser___ReduceAction263___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8251;
-  fra.me.meth = LOCATE_parser___ReduceAction239___action;
+  fra.me.line = 8782;
+  fra.me.meth = LOCATE_parser___ReduceAction263___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27807,82 +25022,59 @@ void parser___ReduceAction239___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8253 */
+  /* parser/parser.nit:8784 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8254 */
+  /* parser/parser.nit:8785 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8255 */
+  /* parser/parser.nit:8786 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8256 */
+  /* parser/parser.nit:8787 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8258 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwcontinue, ID_TKwcontinue)) /*cast nullable TKwcontinue*/;
+  /* parser/parser.nit:8789 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwcontinue, ID_parser___parser_nodes___TKwcontinue)) /*cast nullable TKwcontinue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8258);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8789);
   }
-  /* ./parser//parser.nit:8260 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:8791 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8260);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8791);
   }
-  /* ./parser//parser.nit:8262 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8793 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8262);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8793);
   }
-  /* ./parser//parser.nit:8263 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8268 */
+  /* parser/parser.nit:8794 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8799 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8269 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction239____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8800 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8269);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8800);
   }
-  REGB0 = ATTR_parser___ReduceAction239____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction239___init(val_t p0, val_t p1, int* init_table){
-  int itpos238 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction239].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos238]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8272;
-  fra.me.meth = LOCATE_parser___ReduceAction239___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8272 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction239____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos238] = 1;
-  return;
-}
-void parser___ReduceAction246___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction270___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8276;
-  fra.me.meth = LOCATE_parser___ReduceAction246___action;
+  fra.me.line = 8805;
+  fra.me.meth = LOCATE_parser___ReduceAction270___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27890,96 +25082,67 @@ void parser___ReduceAction246___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8278 */
+  /* parser/parser.nit:8807 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8279 */
+  /* parser/parser.nit:8808 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8280 */
+  /* parser/parser.nit:8809 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8281 */
+  /* parser/parser.nit:8810 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8282 */
+  /* parser/parser.nit:8811 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8283 */
+  /* parser/parser.nit:8812 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8284 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8285 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8287 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8813 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8815 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8287);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8815);
   }
-  /* ./parser//parser.nit:8289 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:8817 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8289);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8817);
   }
-  /* ./parser//parser.nit:8291 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8819 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8291);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8819);
   }
-  /* ./parser//parser.nit:8292 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8293 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:8299 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:8300 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction246____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8820 */
+  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser.nit:8826 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:8827 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8300);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8827);
   }
-  REGB0 = ATTR_parser___ReduceAction246____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction246___init(val_t p0, val_t p1, int* init_table){
-  int itpos239 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction246].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos239]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8303;
-  fra.me.meth = LOCATE_parser___ReduceAction246___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8303 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction246____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos239] = 1;
-  return;
-}
-void parser___ReduceAction247___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction271___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8307;
-  fra.me.meth = LOCATE_parser___ReduceAction247___action;
+  fra.me.line = 8832;
+  fra.me.meth = LOCATE_parser___ReduceAction271___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -27987,86 +25150,57 @@ void parser___ReduceAction247___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8309 */
+  /* parser/parser.nit:8834 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8310 */
+  /* parser/parser.nit:8835 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8311 */
+  /* parser/parser.nit:8836 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8312 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8313 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8314 */
-  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8317 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:8837 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8838 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:8840 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8840);
   }
-  /* ./parser//parser.nit:8319 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8842 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8842);
   }
-  /* ./parser//parser.nit:8320 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8321 */
-  fra.me.REG[6] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:8327 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8328 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction247____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8843 */
+  fra.me.REG[5] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:8849 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:8850 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8328);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8850);
   }
-  REGB0 = ATTR_parser___ReduceAction247____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction247___init(val_t p0, val_t p1, int* init_table){
-  int itpos240 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction247].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos240]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8331;
-  fra.me.meth = LOCATE_parser___ReduceAction247___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8331 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction247____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos240] = 1;
-  return;
-}
-void parser___ReduceAction248___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction272___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8335;
-  fra.me.meth = LOCATE_parser___ReduceAction248___action;
+  fra.me.line = 8855;
+  fra.me.meth = LOCATE_parser___ReduceAction272___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28075,107 +25209,78 @@ void parser___ReduceAction248___action(val_t p0, val_t p1){
   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.nit:8337 */
+  /* parser/parser.nit:8857 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8338 */
+  /* parser/parser.nit:8858 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8339 */
+  /* parser/parser.nit:8859 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8340 */
+  /* parser/parser.nit:8860 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8341 */
+  /* parser/parser.nit:8861 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8342 */
+  /* parser/parser.nit:8862 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8343 */
+  /* parser/parser.nit:8863 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8344 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8345 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8347 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8347);
-  }
-  /* ./parser//parser.nit:8349 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:8864 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8866 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8349);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8866);
   }
-  /* ./parser//parser.nit:8351 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8868 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8868);
   }
-  /* ./parser//parser.nit:8352 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
-  fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8354 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8870 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8354);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8870);
   }
-  /* ./parser//parser.nit:8355 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[3]);
-  fra.me.REG[8] = fra.me.REG[3];
-  /* ./parser//parser.nit:8356 */
-  fra.me.REG[8] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[8]);
-  /* ./parser//parser.nit:8362 */
-  fra.me.REG[2] = fra.me.REG[8];
-  /* ./parser//parser.nit:8363 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction248____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8872 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8363);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8872);
   }
-  REGB0 = ATTR_parser___ReduceAction248____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction248___init(val_t p0, val_t p1, int* init_table){
-  int itpos241 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction248].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos241]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8366;
-  fra.me.meth = LOCATE_parser___ReduceAction248___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8366 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction248____goto(fra.me.REG[1]) = REGB0;
+  /* parser/parser.nit:8873 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
+  fra.me.REG[7] = fra.me.REG[3];
+  /* parser/parser.nit:8874 */
+  fra.me.REG[7] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
+  /* parser/parser.nit:8880 */
+  fra.me.REG[2] = fra.me.REG[7];
+  /* parser/parser.nit:8881 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8881);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos241] = 1;
   return;
 }
-void parser___ReduceAction249___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction273___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8370;
-  fra.me.meth = LOCATE_parser___ReduceAction249___action;
+  fra.me.line = 8886;
+  fra.me.meth = LOCATE_parser___ReduceAction273___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28184,362 +25289,301 @@ void parser___ReduceAction249___action(val_t p0, val_t p1){
   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.nit:8372 */
+  /* parser/parser.nit:8888 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8373 */
+  /* parser/parser.nit:8889 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8374 */
+  /* parser/parser.nit:8890 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8375 */
+  /* parser/parser.nit:8891 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8376 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8377 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8378 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8381 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:8892 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:8893 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:8895 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8381);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8895);
   }
-  /* ./parser//parser.nit:8383 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8897 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8897);
   }
-  /* ./parser//parser.nit:8384 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
-  fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:8386 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8899 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8386);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8899);
   }
-  /* ./parser//parser.nit:8387 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:8388 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[8], fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:8394 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:8395 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction249____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8900 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
+  fra.me.REG[6] = fra.me.REG[3];
+  /* parser/parser.nit:8901 */
+  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[7], fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:8907 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:8908 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8395);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8908);
   }
-  REGB0 = ATTR_parser___ReduceAction249____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction249___init(val_t p0, val_t p1, int* init_table){
-  int itpos242 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction249].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos242]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8398;
-  fra.me.meth = LOCATE_parser___ReduceAction249___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8398 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction249____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos242] = 1;
-  return;
-}
-void parser___ReduceAction250___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction274___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8402;
-  fra.me.meth = LOCATE_parser___ReduceAction250___action;
+  fra.me.line = 8913;
+  fra.me.meth = LOCATE_parser___ReduceAction274___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
-  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8404 */
+  /* parser/parser.nit:8915 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8405 */
+  /* parser/parser.nit:8916 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8406 */
+  /* parser/parser.nit:8917 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8407 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8409 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:8919 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8409);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8919);
   }
-  /* ./parser//parser.nit:8411 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8921 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8921);
   }
-  /* ./parser//parser.nit:8412 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8413 */
-  fra.me.REG[5] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:8418 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8419 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction250____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8922 */
+  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8927 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8928 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8419);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8928);
   }
-  REGB0 = ATTR_parser___ReduceAction250____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction250___init(val_t p0, val_t p1, int* init_table){
-  int itpos243 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction250].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos243]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8422;
-  fra.me.meth = LOCATE_parser___ReduceAction250___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8422 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction250____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos243] = 1;
-  return;
-}
-void parser___ReduceAction251___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction275___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8426;
-  fra.me.meth = LOCATE_parser___ReduceAction251___action;
+  fra.me.line = 8933;
+  fra.me.meth = LOCATE_parser___ReduceAction275___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8428 */
+  /* parser/parser.nit:8935 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8429 */
+  /* parser/parser.nit:8936 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8430 */
+  /* parser/parser.nit:8937 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8431 */
+  /* parser/parser.nit:8938 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8432 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8434 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AQualified, ID_AQualified)) /*cast nullable AQualified*/;
+  /* parser/parser.nit:8940 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AQualified, ID_parser___parser_nodes___AQualified)) /*cast nullable AQualified*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8434);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8940);
   }
-  /* ./parser//parser.nit:8436 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwsuper, ID_TKwsuper)) /*cast nullable TKwsuper*/;
+  /* parser/parser.nit:8942 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwsuper, ID_parser___parser_nodes___TKwsuper)) /*cast nullable TKwsuper*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8436);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8942);
   }
-  /* ./parser//parser.nit:8438 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8944 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8438);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8944);
   }
-  /* ./parser//parser.nit:8439 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8440 */
-  fra.me.REG[6] = NEW_ASuperExpr_parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:8445 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8446 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction251____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8945 */
+  fra.me.REG[3] = NEW_ASuperExpr_parser___parser_prod___ASuperExpr___init_asuperexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8950 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8951 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8446);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8951);
   }
-  REGB0 = ATTR_parser___ReduceAction251____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction251___init(val_t p0, val_t p1, int* init_table){
-  int itpos244 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction251].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos244]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8449;
-  fra.me.meth = LOCATE_parser___ReduceAction251___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8449 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction251____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos244] = 1;
-  return;
-}
-void parser___ReduceAction252___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction276___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8453;
-  fra.me.meth = LOCATE_parser___ReduceAction252___action;
+  fra.me.line = 8956;
+  fra.me.meth = LOCATE_parser___ReduceAction276___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8455 */
+  /* parser/parser.nit:8958 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8456 */
+  /* parser/parser.nit:8959 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8457 */
+  /* parser/parser.nit:8960 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8458 */
+  /* parser/parser.nit:8961 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8459 */
+  /* parser/parser.nit:8962 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8460 */
+  /* parser/parser.nit:8963 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8461 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8463 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:8965 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8463);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8965);
   }
-  /* ./parser//parser.nit:8465 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:8967 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8967);
   }
-  /* ./parser//parser.nit:8467 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:8969 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8467);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8969);
   }
-  /* ./parser//parser.nit:8468 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:8469 */
-  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:8474 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:8475 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction252____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:8970 */
+  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8975 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8976 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8475);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8976);
   }
-  REGB0 = ATTR_parser___ReduceAction252____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction252___init(val_t p0, val_t p1, int* init_table){
-  int itpos245 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction252].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction277___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos245]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8478;
-  fra.me.meth = LOCATE_parser___ReduceAction252___init;
+  fra.me.line = 8981;
+  fra.me.meth = LOCATE_parser___ReduceAction277___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8478 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction252____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:8983 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:8984 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8985 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:8986 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:8988 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8988);
+  }
+  /* parser/parser.nit:8990 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 8990);
+  }
+  /* parser/parser.nit:8991 */
+  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:8996 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:8997 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8997);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos245] = 1;
   return;
 }
-void parser___ReduceAction253___action(val_t p0, val_t p1){
+void parser___ReduceAction278___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8482;
-  fra.me.meth = LOCATE_parser___ReduceAction253___action;
+  fra.me.line = 9002;
+  fra.me.meth = LOCATE_parser___ReduceAction278___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28549,81 +25593,69 @@ void parser___ReduceAction253___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8484 */
+  /* parser/parser.nit:9004 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8485 */
+  /* parser/parser.nit:9005 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8486 */
+  /* parser/parser.nit:9006 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9007 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8487 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8488 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:8491 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:9008 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9009 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9011 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwdebug, ID_parser___parser_nodes___TKwdebug)) /*cast nullable TKwdebug*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8491);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9011);
   }
-  /* ./parser//parser.nit:8493 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9013 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwtype, ID_parser___parser_nodes___TKwtype)) /*cast nullable TKwtype*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8493);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9013);
   }
-  /* ./parser//parser.nit:8494 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8495 */
-  fra.me.REG[5] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[6], fra.me.REG[4], fra.me.REG[5]);
-  /* ./parser//parser.nit:8500 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8501 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction253____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9015 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9015);
+  }
+  /* parser/parser.nit:9017 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9017);
+  }
+  /* parser/parser.nit:9018 */
+  fra.me.REG[4] = NEW_ADebugTypeExpr_parser___parser_prod___ADebugTypeExpr___init_adebugtypeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[3], fra.me.REG[4]);
+  /* parser/parser.nit:9024 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:9025 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8501);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9025);
   }
-  REGB0 = ATTR_parser___ReduceAction253____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction253___init(val_t p0, val_t p1, int* init_table){
-  int itpos246 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction253].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;
-  fra.me.line = 8504;
-  fra.me.meth = LOCATE_parser___ReduceAction253___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8504 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction253____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos246] = 1;
-  return;
-}
-void parser___ReduceAction254___action(val_t p0, val_t p1){
+void parser___ReduceAction279___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8508;
-  fra.me.meth = LOCATE_parser___ReduceAction254___action;
+  fra.me.line = 9030;
+  fra.me.meth = LOCATE_parser___ReduceAction279___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28631,75 +25663,52 @@ void parser___ReduceAction254___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8510 */
+  /* parser/parser.nit:9032 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8511 */
+  /* parser/parser.nit:9033 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8512 */
+  /* parser/parser.nit:9034 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8514 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwlabel, ID_TKwlabel)) /*cast nullable TKwlabel*/;
+  /* parser/parser.nit:9036 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwlabel, ID_parser___parser_nodes___TKwlabel)) /*cast nullable TKwlabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8514);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9036);
   }
-  /* ./parser//parser.nit:8516 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9038 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8516);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9038);
   }
-  /* ./parser//parser.nit:8517 */
-  fra.me.REG[3] = NEW_ALabel_parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8521 */
+  /* parser/parser.nit:9039 */
+  fra.me.REG[3] = NEW_ALabel_parser___parser_prod___ALabel___init_alabel(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9043 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8522 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction254____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9044 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8522);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9044);
   }
-  REGB0 = ATTR_parser___ReduceAction254____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction254___init(val_t p0, val_t p1, int* init_table){
-  int itpos247 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction254].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos247]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8525;
-  fra.me.meth = LOCATE_parser___ReduceAction254___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8525 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction254____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos247] = 1;
-  return;
-}
-void parser___ReduceAction255___action(val_t p0, val_t p1){
+void parser___ReduceAction280___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8529;
-  fra.me.meth = LOCATE_parser___ReduceAction255___action;
+  fra.me.line = 9049;
+  fra.me.meth = LOCATE_parser___ReduceAction280___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28707,13 +25716,13 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8531 */
+  /* parser/parser.nit:9051 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8532 */
+  /* parser/parser.nit:9052 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8533 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8535 */
+  /* parser/parser.nit:9053 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9055 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28722,64 +25731,41 @@ void parser___ReduceAction255___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8536 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:9056 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:8538 */
+  /* parser/parser.nit:9058 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:8539 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction255____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9059 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8539);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9059);
   }
-  REGB0 = ATTR_parser___ReduceAction255____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction255___init(val_t p0, val_t p1, int* init_table){
-  int itpos248 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction255].i;
-  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;
-  fra.me.line = 8542;
-  fra.me.meth = LOCATE_parser___ReduceAction255___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8542 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction255____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos248] = 1;
-  return;
-}
-void parser___ReduceAction256___action(val_t p0, val_t p1){
+void parser___ReduceAction281___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8546;
-  fra.me.meth = LOCATE_parser___ReduceAction256___action;
+  fra.me.line = 9064;
+  fra.me.meth = LOCATE_parser___ReduceAction281___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28788,21 +25774,21 @@ void parser___ReduceAction256___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8548 */
+  /* parser/parser.nit:9066 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8549 */
+  /* parser/parser.nit:9067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8550 */
+  /* parser/parser.nit:9068 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8551 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8554 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9069 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9072 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8554);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9072);
   }
-  /* ./parser//parser.nit:8555 */
+  /* parser/parser.nit:9073 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -28811,66 +25797,43 @@ void parser___ReduceAction256___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:8556 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:9074 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:8558 */
+  /* parser/parser.nit:9076 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:8559 */
+  /* parser/parser.nit:9077 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:8560 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction256____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9078 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8560);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9078);
   }
-  REGB0 = ATTR_parser___ReduceAction256____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction256___init(val_t p0, val_t p1, int* init_table){
-  int itpos249 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction256].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos249]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8563;
-  fra.me.meth = LOCATE_parser___ReduceAction256___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8563 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction256____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos249] = 1;
-  return;
-}
-void parser___ReduceAction257___action(val_t p0, val_t p1){
+void parser___ReduceAction282___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8567;
-  fra.me.meth = LOCATE_parser___ReduceAction257___action;
+  fra.me.line = 9083;
+  fra.me.meth = LOCATE_parser___ReduceAction282___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28882,100 +25845,175 @@ void parser___ReduceAction257___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8569 */
+  /* parser/parser.nit:9085 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8570 */
+  /* parser/parser.nit:9086 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8571 */
+  /* parser/parser.nit:9087 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8572 */
+  /* parser/parser.nit:9088 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8573 */
+  /* parser/parser.nit:9089 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8574 */
+  /* parser/parser.nit:9090 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8575 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8577 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9091 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9093 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8577);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9093);
   }
-  /* ./parser//parser.nit:8579 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9095 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8579);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9095);
   }
-  /* ./parser//parser.nit:8581 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9097 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8581);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9097);
   }
-  /* ./parser//parser.nit:8583 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9099 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8583);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9099);
   }
-  /* ./parser//parser.nit:8585 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:9101 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8585);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9101);
   }
-  /* ./parser//parser.nit:8586 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8594 */
+  /* parser/parser.nit:9102 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9110 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8595 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction257____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9111 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8595);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9111);
   }
-  REGB0 = ATTR_parser___ReduceAction257____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction257___init(val_t p0, val_t p1, int* init_table){
-  int itpos250 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction257].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction283___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} 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;
-  fra.me.line = 8598;
-  fra.me.meth = LOCATE_parser___ReduceAction257___init;
+  fra.me.line = 9116;
+  fra.me.meth = LOCATE_parser___ReduceAction283___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8598 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction257____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:9118 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:9119 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9120 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9121 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9122 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9123 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9124 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9125 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9126 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9127 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9129 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9129);
+  }
+  /* parser/parser.nit:9131 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9131);
+  }
+  /* parser/parser.nit:9133 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9133);
+  }
+  /* parser/parser.nit:9134 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[6]);
+  fra.me.REG[9] = fra.me.REG[6];
+  /* parser/parser.nit:9136 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9136);
+  }
+  /* parser/parser.nit:9138 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9138);
+  }
+  /* parser/parser.nit:9140 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9140);
+  }
+  /* parser/parser.nit:9141 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9149 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9150 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9150);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos250] = 1;
   return;
 }
-void parser___ReduceAction258___action(val_t p0, val_t p1){
+void parser___ReduceAction284___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8602;
-  fra.me.meth = LOCATE_parser___ReduceAction258___action;
+  fra.me.line = 9155;
+  fra.me.meth = LOCATE_parser___ReduceAction284___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -28988,111 +26026,88 @@ void parser___ReduceAction258___action(val_t p0, val_t p1){
   fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8604 */
+  /* parser/parser.nit:9157 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8605 */
+  /* parser/parser.nit:9158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8606 */
+  /* parser/parser.nit:9159 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8607 */
+  /* parser/parser.nit:9160 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8608 */
+  /* parser/parser.nit:9161 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8609 */
+  /* parser/parser.nit:9162 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8610 */
+  /* parser/parser.nit:9163 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8611 */
-  fra.me.REG[9] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8613 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9164 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9166 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9166);
   }
-  /* ./parser//parser.nit:8615 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9168 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9168);
   }
-  /* ./parser//parser.nit:8617 */
-  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9170 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8617);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9170);
   }
-  /* ./parser//parser.nit:8618 */
+  /* parser/parser.nit:9171 */
   fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[6]);
   fra.me.REG[9] = fra.me.REG[6];
-  /* ./parser//parser.nit:8620 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9173 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9173);
   }
-  /* ./parser//parser.nit:8622 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9175 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8622);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9175);
   }
-  /* ./parser//parser.nit:8624 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:9177 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8624);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9177);
   }
-  /* ./parser//parser.nit:8625 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:8633 */
+  /* parser/parser.nit:9178 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[8], fra.me.REG[7], fra.me.REG[9], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9186 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8634 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction258____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9187 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8634);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9187);
   }
-  REGB0 = ATTR_parser___ReduceAction258____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction258___init(val_t p0, val_t p1, int* init_table){
-  int itpos251 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction258].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos251]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8637;
-  fra.me.meth = LOCATE_parser___ReduceAction258___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8637 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction258____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos251] = 1;
-  return;
-}
-void parser___ReduceAction259___action(val_t p0, val_t p1){
+void parser___ReduceAction285___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8641;
-  fra.me.meth = LOCATE_parser___ReduceAction259___action;
+  fra.me.line = 9192;
+  fra.me.meth = LOCATE_parser___ReduceAction285___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29103,92 +26118,69 @@ void parser___ReduceAction259___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8643 */
+  /* parser/parser.nit:9194 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8644 */
+  /* parser/parser.nit:9195 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8645 */
+  /* parser/parser.nit:9196 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8646 */
+  /* parser/parser.nit:9197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8647 */
+  /* parser/parser.nit:9198 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8648 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8650 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9199 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9201 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8650);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9201);
   }
-  /* ./parser//parser.nit:8652 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9203 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8652);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9203);
   }
-  /* ./parser//parser.nit:8654 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9205 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8654);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9205);
   }
-  /* ./parser//parser.nit:8656 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9207 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9207);
   }
-  /* ./parser//parser.nit:8657 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8665 */
+  /* parser/parser.nit:9208 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9216 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8666 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction259____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9217 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9217);
   }
-  REGB0 = ATTR_parser___ReduceAction259____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction259___init(val_t p0, val_t p1, int* init_table){
-  int itpos252 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction259].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos252]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8669;
-  fra.me.meth = LOCATE_parser___ReduceAction259___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8669 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction259____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos252] = 1;
-  return;
-}
-void parser___ReduceAction260___action(val_t p0, val_t p1){
+void parser___ReduceAction286___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8673;
-  fra.me.meth = LOCATE_parser___ReduceAction260___action;
+  fra.me.line = 9222;
+  fra.me.meth = LOCATE_parser___ReduceAction286___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29200,103 +26192,169 @@ void parser___ReduceAction260___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8675 */
+  /* parser/parser.nit:9224 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8676 */
+  /* parser/parser.nit:9225 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8677 */
+  /* parser/parser.nit:9226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8678 */
+  /* parser/parser.nit:9227 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9228 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8679 */
+  /* parser/parser.nit:9229 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8680 */
+  /* parser/parser.nit:9230 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9231 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8681 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8683 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9232 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9234 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8683);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9234);
   }
-  /* ./parser//parser.nit:8685 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9236 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8685);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9236);
   }
-  /* ./parser//parser.nit:8687 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9238 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8687);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9238);
   }
-  /* ./parser//parser.nit:8688 */
+  /* parser/parser.nit:9239 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
   fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:8690 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9241 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8690);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9241);
   }
-  /* ./parser//parser.nit:8692 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9243 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8692);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9243);
   }
-  /* ./parser//parser.nit:8693 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8701 */
+  /* parser/parser.nit:9244 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9252 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8702 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction260____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9253 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8702);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9253);
   }
-  REGB0 = ATTR_parser___ReduceAction260____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction260___init(val_t p0, val_t p1, int* init_table){
-  int itpos253 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction260].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction287___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos253]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8705;
-  fra.me.meth = LOCATE_parser___ReduceAction260___init;
+  fra.me.line = 9258;
+  fra.me.meth = LOCATE_parser___ReduceAction287___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8705 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction260____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:9260 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:9261 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9262 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9263 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9264 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9265 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9266 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9268 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9268);
+  }
+  /* parser/parser.nit:9270 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9270);
+  }
+  /* parser/parser.nit:9272 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9272);
+  }
+  /* parser/parser.nit:9273 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
+  fra.me.REG[8] = fra.me.REG[5];
+  /* parser/parser.nit:9275 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9275);
+  }
+  /* parser/parser.nit:9277 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9277);
+  }
+  /* parser/parser.nit:9278 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9286 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9287 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9287);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos253] = 1;
   return;
 }
-void parser___ReduceAction261___action(val_t p0, val_t p1){
+void parser___ReduceAction288___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8709;
-  fra.me.meth = LOCATE_parser___ReduceAction261___action;
+  fra.me.line = 9292;
+  fra.me.meth = LOCATE_parser___ReduceAction288___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29306,88 +26364,65 @@ void parser___ReduceAction261___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8711 */
+  /* parser/parser.nit:9294 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8712 */
+  /* parser/parser.nit:9295 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8713 */
+  /* parser/parser.nit:9296 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8714 */
+  /* parser/parser.nit:9297 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8715 */
+  /* parser/parser.nit:9298 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8716 */
+  /* parser/parser.nit:9299 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8717 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8719 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9300 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9302 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8719);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9302);
   }
-  /* ./parser//parser.nit:8721 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9304 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8721);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9304);
   }
-  /* ./parser//parser.nit:8723 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9306 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8723);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9306);
   }
-  /* ./parser//parser.nit:8724 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8732 */
+  /* parser/parser.nit:9307 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9315 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8733 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction261____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9316 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8733);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9316);
   }
-  REGB0 = ATTR_parser___ReduceAction261____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction261___init(val_t p0, val_t p1, int* init_table){
-  int itpos254 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction261].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 8736;
-  fra.me.meth = LOCATE_parser___ReduceAction261___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8736 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction261____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos254] = 1;
-  return;
-}
-void parser___ReduceAction262___action(val_t p0, val_t p1){
+void parser___ReduceAction289___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8740;
-  fra.me.meth = LOCATE_parser___ReduceAction262___action;
+  fra.me.line = 9321;
+  fra.me.meth = LOCATE_parser___ReduceAction289___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29398,99 +26433,160 @@ void parser___ReduceAction262___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8742 */
+  /* parser/parser.nit:9323 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8743 */
+  /* parser/parser.nit:9324 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8744 */
+  /* parser/parser.nit:9325 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9326 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8745 */
+  /* parser/parser.nit:9327 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8746 */
+  /* parser/parser.nit:9328 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8747 */
+  /* parser/parser.nit:9329 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8748 */
+  /* parser/parser.nit:9330 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9331 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8749 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8751 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9332 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9334 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8751);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9334);
   }
-  /* ./parser//parser.nit:8753 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9336 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8753);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9336);
   }
-  /* ./parser//parser.nit:8755 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9338 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8755);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9338);
   }
-  /* ./parser//parser.nit:8756 */
+  /* parser/parser.nit:9339 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8758 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9341 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8758);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9341);
   }
-  /* ./parser//parser.nit:8759 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8767 */
+  /* parser/parser.nit:9342 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9350 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8768 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction262____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9351 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8768);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9351);
   }
-  REGB0 = ATTR_parser___ReduceAction262____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction262___init(val_t p0, val_t p1, int* init_table){
-  int itpos255 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction262].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction290___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos255]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8771;
-  fra.me.meth = LOCATE_parser___ReduceAction262___init;
+  fra.me.line = 9356;
+  fra.me.meth = LOCATE_parser___ReduceAction290___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8771 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction262____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:9358 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:9359 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9360 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9361 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9362 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9363 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9364 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9365 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9367 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9367);
+  }
+  /* parser/parser.nit:9369 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9369);
+  }
+  /* parser/parser.nit:9371 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9371);
+  }
+  /* parser/parser.nit:9372 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
+  fra.me.REG[7] = fra.me.REG[4];
+  /* parser/parser.nit:9374 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9374);
+  }
+  /* parser/parser.nit:9375 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9383 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9384 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9384);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos255] = 1;
   return;
 }
-void parser___ReduceAction263___action(val_t p0, val_t p1){
+void parser___ReduceAction291___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8775;
-  fra.me.meth = LOCATE_parser___ReduceAction263___action;
+  fra.me.line = 9389;
+  fra.me.meth = LOCATE_parser___ReduceAction291___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29501,94 +26597,162 @@ void parser___ReduceAction263___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8777 */
+  /* parser/parser.nit:9391 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8778 */
+  /* parser/parser.nit:9392 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8779 */
+  /* parser/parser.nit:9393 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8780 */
+  /* parser/parser.nit:9394 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8781 */
+  /* parser/parser.nit:9395 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8782 */
+  /* parser/parser.nit:9396 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8783 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8785 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9397 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9399 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8785);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9399);
   }
-  /* ./parser//parser.nit:8787 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9401 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9401);
   }
-  /* ./parser//parser.nit:8789 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9403 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8789);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9403);
   }
-  /* ./parser//parser.nit:8791 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9405 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8791);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9405);
   }
-  /* ./parser//parser.nit:8792 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8800 */
+  /* parser/parser.nit:9406 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9414 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8801 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction263____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9415 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8801);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9415);
   }
-  REGB0 = ATTR_parser___ReduceAction263____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction263___init(val_t p0, val_t p1, int* init_table){
-  int itpos256 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction263].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction292___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos256]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8804;
-  fra.me.meth = LOCATE_parser___ReduceAction263___init;
+  fra.me.line = 9420;
+  fra.me.meth = LOCATE_parser___ReduceAction292___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8804 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction263____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:9422 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:9423 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9424 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9425 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9426 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9427 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9428 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9429 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9430 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9431 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9433 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9433);
+  }
+  /* parser/parser.nit:9435 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9435);
+  }
+  /* parser/parser.nit:9437 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9437);
+  }
+  /* parser/parser.nit:9438 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
+  fra.me.REG[8] = fra.me.REG[5];
+  /* parser/parser.nit:9440 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9440);
+  }
+  /* parser/parser.nit:9442 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9442);
+  }
+  /* parser/parser.nit:9443 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9451 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9452 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9452);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos256] = 1;
   return;
 }
-void parser___ReduceAction264___action(val_t p0, val_t p1){
+void parser___ReduceAction293___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8808;
-  fra.me.meth = LOCATE_parser___ReduceAction264___action;
+  fra.me.line = 9457;
+  fra.me.meth = LOCATE_parser___ReduceAction293___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29600,105 +26764,148 @@ void parser___ReduceAction264___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8810 */
+  /* parser/parser.nit:9459 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8811 */
+  /* parser/parser.nit:9460 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8812 */
+  /* parser/parser.nit:9461 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8813 */
+  /* parser/parser.nit:9462 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8814 */
+  /* parser/parser.nit:9463 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8815 */
+  /* parser/parser.nit:9464 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8816 */
+  /* parser/parser.nit:9465 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8817 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8819 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9466 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9468 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8819);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9468);
+  }
+  /* parser/parser.nit:9470 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9470);
+  }
+  /* parser/parser.nit:9472 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9472);
+  }
+  /* parser/parser.nit:9473 */
+  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
+  fra.me.REG[8] = fra.me.REG[5];
+  /* parser/parser.nit:9475 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9475);
+  }
+  /* parser/parser.nit:9477 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9477);
   }
-  /* ./parser//parser.nit:8821 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9478 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:9486 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:9487 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8821);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9487);
   }
-  /* ./parser//parser.nit:8823 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
+  stack_frame_head = fra.me.prev;
+  return;
+}
+void parser___ReduceAction294___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+  val_t REGB0;
+  val_t tmp;
+  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
+  fra.me.file = LOCATE_parser;
+  fra.me.line = 9492;
+  fra.me.meth = LOCATE_parser___ReduceAction294___action;
+  fra.me.has_broke = 0;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
+  fra.me.REG[0] = NIT_NULL;
+  fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:9494 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:9495 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9496 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9497 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9498 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9499 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9501 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8823);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9501);
   }
-  /* ./parser//parser.nit:8824 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:8826 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9503 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8826);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9503);
   }
-  /* ./parser//parser.nit:8828 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9505 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8828);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9505);
   }
-  /* ./parser//parser.nit:8829 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:8837 */
+  /* parser/parser.nit:9506 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9514 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8838 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction264____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9515 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8838);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9515);
   }
-  REGB0 = ATTR_parser___ReduceAction264____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction264___init(val_t p0, val_t p1, int* init_table){
-  int itpos257 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction264].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos257]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8841;
-  fra.me.meth = LOCATE_parser___ReduceAction264___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8841 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction264____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos257] = 1;
-  return;
-}
-void parser___ReduceAction265___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction295___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8845;
-  fra.me.meth = LOCATE_parser___ReduceAction265___action;
+  fra.me.line = 9520;
+  fra.me.meth = LOCATE_parser___ReduceAction295___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29706,88 +26913,81 @@ void parser___ReduceAction265___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8847 */
+  /* parser/parser.nit:9522 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8848 */
+  /* parser/parser.nit:9523 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8849 */
+  /* parser/parser.nit:9524 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8850 */
+  /* parser/parser.nit:9525 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8851 */
+  /* parser/parser.nit:9526 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9527 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9528 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8852 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8854 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9529 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:9530 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9532 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9532);
+  }
+  /* parser/parser.nit:9534 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8854);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9534);
   }
-  /* ./parser//parser.nit:8856 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9536 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8856);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9536);
   }
-  /* ./parser//parser.nit:8858 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9537 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
+  fra.me.REG[7] = fra.me.REG[4];
+  /* parser/parser.nit:9539 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8858);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9539);
   }
-  /* ./parser//parser.nit:8859 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8867 */
+  /* parser/parser.nit:9540 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9548 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8868 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction265____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9549 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8868);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9549);
   }
-  REGB0 = ATTR_parser___ReduceAction265____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction265___init(val_t p0, val_t p1, int* init_table){
-  int itpos258 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction265].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos258]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8871;
-  fra.me.meth = LOCATE_parser___ReduceAction265___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8871 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction265____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos258] = 1;
-  return;
-}
-void parser___ReduceAction266___action(val_t p0, val_t p1){
+void parser___ReduceAction296___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8875;
-  fra.me.meth = LOCATE_parser___ReduceAction266___action;
+  fra.me.line = 9554;
+  fra.me.meth = LOCATE_parser___ReduceAction296___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -29798,295 +26998,203 @@ void parser___ReduceAction266___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8877 */
+  /* parser/parser.nit:9556 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8878 */
+  /* parser/parser.nit:9557 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8879 */
+  /* parser/parser.nit:9558 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8880 */
+  /* parser/parser.nit:9559 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8881 */
+  /* parser/parser.nit:9560 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8882 */
+  /* parser/parser.nit:9561 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8883 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:8885 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TBang, ID_TBang)) /*cast nullable TBang*/;
+  /* parser/parser.nit:9562 */
+  fra.me.REG[7] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:9564 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TBang, ID_parser___parser_nodes___TBang)) /*cast nullable TBang*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8885);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9564);
   }
-  /* ./parser//parser.nit:8887 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AClosureId, ID_AClosureId)) /*cast nullable AClosureId*/;
+  /* parser/parser.nit:9566 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AClosureId, ID_parser___parser_nodes___AClosureId)) /*cast nullable AClosureId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8887);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9566);
   }
-  /* ./parser//parser.nit:8889 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9568 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9568);
   }
-  /* ./parser//parser.nit:8890 */
+  /* parser/parser.nit:9569 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[4]);
   fra.me.REG[7] = fra.me.REG[4];
-  /* ./parser//parser.nit:8892 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:9571 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8892);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9571);
   }
-  /* ./parser//parser.nit:8893 */
-  fra.me.REG[3] = NEW_AClosureDef_parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8901 */
+  /* parser/parser.nit:9572 */
+  fra.me.REG[3] = NEW_AClosureDef_parser___parser_prod___AClosureDef___init_aclosuredef(fra.me.REG[6], fra.me.REG[5], fra.me.REG[7], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9580 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8902 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction266____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9581 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8902);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9581);
   }
-  REGB0 = ATTR_parser___ReduceAction266____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction266___init(val_t p0, val_t p1, int* init_table){
-  int itpos259 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction266].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos259]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8905;
-  fra.me.meth = LOCATE_parser___ReduceAction266___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8905 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction266____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos259] = 1;
-  return;
-}
-void parser___ReduceAction267___action(val_t p0, val_t p1){
+void parser___ReduceAction297___action(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;
-  fra.me.line = 8909;
-  fra.me.meth = LOCATE_parser___ReduceAction267___action;
+  fra.me.line = 9586;
+  fra.me.meth = LOCATE_parser___ReduceAction297___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8911 */
+  /* parser/parser.nit:9588 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8912 */
+  /* parser/parser.nit:9589 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8914 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9591 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9591);
   }
-  /* ./parser//parser.nit:8915 */
-  fra.me.REG[3] = NEW_ASimpleClosureId_parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8918 */
+  /* parser/parser.nit:9592 */
+  fra.me.REG[3] = NEW_ASimpleClosureId_parser___parser_prod___ASimpleClosureId___init_asimpleclosureid(fra.me.REG[3]);
+  /* parser/parser.nit:9595 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8919 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction267____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9596 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8919);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9596);
   }
-  REGB0 = ATTR_parser___ReduceAction267____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction267___init(val_t p0, val_t p1, int* init_table){
-  int itpos260 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction267].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos260]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8922;
-  fra.me.meth = LOCATE_parser___ReduceAction267___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8922 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction267____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos260] = 1;
-  return;
-}
-void parser___ReduceAction268___action(val_t p0, val_t p1){
+void parser___ReduceAction298___action(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;
-  fra.me.line = 8926;
-  fra.me.meth = LOCATE_parser___ReduceAction268___action;
+  fra.me.line = 9601;
+  fra.me.meth = LOCATE_parser___ReduceAction298___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8928 */
+  /* parser/parser.nit:9603 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8929 */
+  /* parser/parser.nit:9604 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8931 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwbreak, ID_TKwbreak)) /*cast nullable TKwbreak*/;
+  /* parser/parser.nit:9606 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwbreak, ID_parser___parser_nodes___TKwbreak)) /*cast nullable TKwbreak*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8931);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9606);
   }
-  /* ./parser//parser.nit:8932 */
-  fra.me.REG[3] = NEW_ABreakClosureId_parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
-  /* ./parser//parser.nit:8935 */
+  /* parser/parser.nit:9607 */
+  fra.me.REG[3] = NEW_ABreakClosureId_parser___parser_prod___ABreakClosureId___init_abreakclosureid(fra.me.REG[3]);
+  /* parser/parser.nit:9610 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8936 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction268____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9611 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8936);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9611);
   }
-  REGB0 = ATTR_parser___ReduceAction268____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction268___init(val_t p0, val_t p1, int* init_table){
-  int itpos261 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction268].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos261]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8939;
-  fra.me.meth = LOCATE_parser___ReduceAction268___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8939 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction268____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos261] = 1;
-  return;
-}
-void parser___ReduceAction269___action(val_t p0, val_t p1){
+void parser___ReduceAction299___action(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;
-  fra.me.line = 8943;
-  fra.me.meth = LOCATE_parser___ReduceAction269___action;
+  fra.me.line = 9616;
+  fra.me.meth = LOCATE_parser___ReduceAction299___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8945 */
+  /* parser/parser.nit:9618 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8946 */
+  /* parser/parser.nit:9619 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8948 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9621 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8948);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9621);
   }
-  /* ./parser//parser.nit:8949 */
-  fra.me.REG[3] = NEW_AContinueExpr_parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:8954 */
+  /* parser/parser.nit:9622 */
+  fra.me.REG[3] = NEW_AContinueExpr_parser___parser_prod___AContinueExpr___init_acontinueexpr(NIT_NULL, NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:9627 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8955 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction269____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9628 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8955);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9628);
   }
-  REGB0 = ATTR_parser___ReduceAction269____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction269___init(val_t p0, val_t p1, int* init_table){
-  int itpos262 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction269].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;
-  fra.me.line = 8958;
-  fra.me.meth = LOCATE_parser___ReduceAction269___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8958 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction269____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos262] = 1;
-  return;
-}
-void parser___ReduceAction270___action(val_t p0, val_t p1){
+void parser___ReduceAction300___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8962;
-  fra.me.meth = LOCATE_parser___ReduceAction270___action;
+  fra.me.line = 9633;
+  fra.me.meth = LOCATE_parser___ReduceAction300___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30094,74 +27202,51 @@ void parser___ReduceAction270___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8964 */
+  /* parser/parser.nit:9635 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8965 */
+  /* parser/parser.nit:9636 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8966 */
+  /* parser/parser.nit:9637 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8968 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:9639 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8968);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9639);
   }
-  /* ./parser//parser.nit:8970 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9641 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9641);
   }
-  /* ./parser//parser.nit:8971 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:8978 */
+  /* parser/parser.nit:9642 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9649 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:8979 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction270____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9650 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 8979);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9650);
   }
-  REGB0 = ATTR_parser___ReduceAction270____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction270___init(val_t p0, val_t p1, int* init_table){
-  int itpos263 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction270].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos263]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 8982;
-  fra.me.meth = LOCATE_parser___ReduceAction270___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:8982 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction270____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos263] = 1;
-  return;
-}
-void parser___ReduceAction271___action(val_t p0, val_t p1){
+void parser___ReduceAction301___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 8986;
-  fra.me.meth = LOCATE_parser___ReduceAction271___action;
+  fra.me.line = 9655;
+  fra.me.meth = LOCATE_parser___ReduceAction301___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30170,82 +27255,59 @@ void parser___ReduceAction271___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:8988 */
+  /* parser/parser.nit:9657 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:8989 */
+  /* parser/parser.nit:9658 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8990 */
+  /* parser/parser.nit:9659 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8991 */
+  /* parser/parser.nit:9660 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:8993 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:9662 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8993);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9662);
   }
-  /* ./parser//parser.nit:8995 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9664 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8995);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9664);
   }
-  /* ./parser//parser.nit:8997 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:9666 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 8997);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9666);
   }
-  /* ./parser//parser.nit:8998 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
-  /* ./parser//parser.nit:9005 */
+  /* parser/parser.nit:9667 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL, NIT_NULL);
+  /* parser/parser.nit:9674 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9006 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction271____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9675 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9006);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9675);
   }
-  REGB0 = ATTR_parser___ReduceAction271____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction271___init(val_t p0, val_t p1, int* init_table){
-  int itpos264 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction271].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 9009;
-  fra.me.meth = LOCATE_parser___ReduceAction271___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9009 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction271____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos264] = 1;
-  return;
-}
-void parser___ReduceAction272___action(val_t p0, val_t p1){
+void parser___ReduceAction302___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9013;
-  fra.me.meth = LOCATE_parser___ReduceAction272___action;
+  fra.me.line = 9680;
+  fra.me.meth = LOCATE_parser___ReduceAction302___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30255,92 +27317,69 @@ void parser___ReduceAction272___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9015 */
+  /* parser/parser.nit:9682 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9016 */
+  /* parser/parser.nit:9683 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9017 */
+  /* parser/parser.nit:9684 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9018 */
+  /* parser/parser.nit:9685 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9019 */
+  /* parser/parser.nit:9686 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9020 */
+  /* parser/parser.nit:9687 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9022 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:9689 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9689);
   }
-  /* ./parser//parser.nit:9024 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9691 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9691);
   }
-  /* ./parser//parser.nit:9026 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9693 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9026);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9693);
   }
-  /* ./parser//parser.nit:9028 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9695 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9028);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9695);
   }
-  /* ./parser//parser.nit:9029 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9036 */
+  /* parser/parser.nit:9696 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[6], fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9703 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9037 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction272____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9704 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9704);
   }
-  REGB0 = ATTR_parser___ReduceAction272____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction272___init(val_t p0, val_t p1, int* init_table){
-  int itpos265 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction272].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos265]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9040;
-  fra.me.meth = LOCATE_parser___ReduceAction272___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9040 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction272____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos265] = 1;
-  return;
-}
-void parser___ReduceAction273___action(val_t p0, val_t p1){
+void parser___ReduceAction303___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9044;
-  fra.me.meth = LOCATE_parser___ReduceAction273___action;
+  fra.me.line = 9709;
+  fra.me.meth = LOCATE_parser___ReduceAction303___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30351,100 +27390,77 @@ void parser___ReduceAction273___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9046 */
+  /* parser/parser.nit:9711 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9047 */
+  /* parser/parser.nit:9712 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9048 */
+  /* parser/parser.nit:9713 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9049 */
+  /* parser/parser.nit:9714 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9050 */
+  /* parser/parser.nit:9715 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9051 */
+  /* parser/parser.nit:9716 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9052 */
+  /* parser/parser.nit:9717 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9054 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwvar, ID_TKwvar)) /*cast nullable TKwvar*/;
+  /* parser/parser.nit:9719 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwvar, ID_parser___parser_nodes___TKwvar)) /*cast nullable TKwvar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9719);
   }
-  /* ./parser//parser.nit:9056 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9721 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9056);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9721);
   }
-  /* ./parser//parser.nit:9058 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:9723 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9058);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9723);
   }
-  /* ./parser//parser.nit:9060 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9725 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9060);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9725);
   }
-  /* ./parser//parser.nit:9062 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9727 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9062);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
   }
-  /* ./parser//parser.nit:9063 */
-  fra.me.REG[3] = NEW_AVardeclExpr_parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9070 */
+  /* parser/parser.nit:9728 */
+  fra.me.REG[3] = NEW_AVardeclExpr_parser___parser_prod___AVardeclExpr___init_avardeclexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9735 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9071 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction273____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9736 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9071);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9736);
   }
-  REGB0 = ATTR_parser___ReduceAction273____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction273___init(val_t p0, val_t p1, int* init_table){
-  int itpos266 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction273].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos266]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9074;
-  fra.me.meth = LOCATE_parser___ReduceAction273___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9074 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction273____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos266] = 1;
-  return;
-}
-void parser___ReduceAction274___action(val_t p0, val_t p1){
+void parser___ReduceAction304___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9078;
-  fra.me.meth = LOCATE_parser___ReduceAction274___action;
+  fra.me.line = 9741;
+  fra.me.meth = LOCATE_parser___ReduceAction304___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30454,94 +27470,71 @@ void parser___ReduceAction274___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9080 */
+  /* parser/parser.nit:9743 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9081 */
+  /* parser/parser.nit:9744 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9082 */
+  /* parser/parser.nit:9745 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9083 */
+  /* parser/parser.nit:9746 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9084 */
+  /* parser/parser.nit:9747 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9085 */
+  /* parser/parser.nit:9748 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9086 */
+  /* parser/parser.nit:9749 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9088 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9751 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9088);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9751);
   }
-  /* ./parser//parser.nit:9090 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:9753 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9090);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9753);
   }
-  /* ./parser//parser.nit:9092 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9755 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9092);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9755);
   }
-  /* ./parser//parser.nit:9094 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9757 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9094);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9757);
   }
-  /* ./parser//parser.nit:9095 */
-  fra.me.REG[3] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9101 */
+  /* parser/parser.nit:9758 */
+  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9764 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9102 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction274____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9765 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9102);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9765);
   }
-  REGB0 = ATTR_parser___ReduceAction274____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction274___init(val_t p0, val_t p1, int* init_table){
-  int itpos267 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction274].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos267]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9105;
-  fra.me.meth = LOCATE_parser___ReduceAction274___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9105 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction274____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos267] = 1;
-  return;
-}
-void parser___ReduceAction275___action(val_t p0, val_t p1){
+void parser___ReduceAction305___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9109;
-  fra.me.meth = LOCATE_parser___ReduceAction275___action;
+  fra.me.line = 9770;
+  fra.me.meth = LOCATE_parser___ReduceAction305___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30551,84 +27544,61 @@ void parser___ReduceAction275___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9111 */
+  /* parser/parser.nit:9772 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9112 */
+  /* parser/parser.nit:9773 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9113 */
+  /* parser/parser.nit:9774 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9114 */
+  /* parser/parser.nit:9775 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9115 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9118 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:9776 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:9778 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9118);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9778);
   }
-  /* ./parser//parser.nit:9120 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9780 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9120);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9780);
   }
-  /* ./parser//parser.nit:9122 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9782 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9122);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9782);
   }
-  /* ./parser//parser.nit:9123 */
-  fra.me.REG[3] = NEW_AAttrAssignExpr_parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9129 */
+  /* parser/parser.nit:9783 */
+  fra.me.REG[3] = NEW_AAttrAssignExpr_parser___parser_prod___AAttrAssignExpr___init_aattrassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9789 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9130 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction275____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9790 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9130);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9790);
   }
-  REGB0 = ATTR_parser___ReduceAction275____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction275___init(val_t p0, val_t p1, int* init_table){
-  int itpos268 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction275].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;
-  fra.me.line = 9133;
-  fra.me.meth = LOCATE_parser___ReduceAction275___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9133 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction275____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos268] = 1;
-  return;
-}
-void parser___ReduceAction276___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction306___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9137;
-  fra.me.meth = LOCATE_parser___ReduceAction276___action;
+  fra.me.line = 9795;
+  fra.me.meth = LOCATE_parser___ReduceAction306___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30637,110 +27607,81 @@ void parser___ReduceAction276___action(val_t p0, val_t p1){
   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.nit:9139 */
+  /* parser/parser.nit:9797 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9140 */
+  /* parser/parser.nit:9798 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9141 */
+  /* parser/parser.nit:9799 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9142 */
+  /* parser/parser.nit:9800 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9143 */
+  /* parser/parser.nit:9801 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9144 */
+  /* parser/parser.nit:9802 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9145 */
+  /* parser/parser.nit:9803 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9146 */
+  /* parser/parser.nit:9804 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9147 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9149 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9806 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9806);
   }
-  /* ./parser//parser.nit:9151 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9808 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9151);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9808);
   }
-  /* ./parser//parser.nit:9153 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9810 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9153);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9810);
   }
-  /* ./parser//parser.nit:9154 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:9156 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9812 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9156);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9812);
   }
-  /* ./parser//parser.nit:9158 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9814 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9158);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9814);
   }
-  /* ./parser//parser.nit:9159 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9166 */
+  /* parser/parser.nit:9815 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9822 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9167 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction276____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9823 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9167);
-  }
-  REGB0 = ATTR_parser___ReduceAction276____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction276___init(val_t p0, val_t p1, int* init_table){
-  int itpos269 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction276].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos269]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9170;
-  fra.me.meth = LOCATE_parser___ReduceAction276___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9170 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction276____goto(fra.me.REG[1]) = REGB0;
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9823);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos269] = 1;
   return;
 }
-void parser___ReduceAction277___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction307___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9174;
-  fra.me.meth = LOCATE_parser___ReduceAction277___action;
+  fra.me.line = 9828;
+  fra.me.meth = LOCATE_parser___ReduceAction307___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30749,100 +27690,71 @@ void parser___ReduceAction277___action(val_t p0, val_t p1){
   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.nit:9176 */
+  /* parser/parser.nit:9830 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9177 */
+  /* parser/parser.nit:9831 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9178 */
+  /* parser/parser.nit:9832 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9179 */
+  /* parser/parser.nit:9833 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9180 */
+  /* parser/parser.nit:9834 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9181 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9182 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9185 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9835 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:9837 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9185);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9837);
   }
-  /* ./parser//parser.nit:9187 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9839 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9187);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9839);
   }
-  /* ./parser//parser.nit:9188 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9190 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9841 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9841);
   }
-  /* ./parser//parser.nit:9192 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9843 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9843);
   }
-  /* ./parser//parser.nit:9193 */
-  fra.me.REG[3] = NEW_ACallAssignExpr_parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9200 */
+  /* parser/parser.nit:9844 */
+  fra.me.REG[3] = NEW_ACallAssignExpr_parser___parser_prod___ACallAssignExpr___init_acallassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9851 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9201 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction277____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9852 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9201);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9852);
   }
-  REGB0 = ATTR_parser___ReduceAction277____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction277___init(val_t p0, val_t p1, int* init_table){
-  int itpos270 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction277].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;
-  fra.me.line = 9204;
-  fra.me.meth = LOCATE_parser___ReduceAction277___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9204 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction277____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos270] = 1;
-  return;
-}
-void parser___ReduceAction278___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction308___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9208;
-  fra.me.meth = LOCATE_parser___ReduceAction278___action;
+  fra.me.line = 9857;
+  fra.me.meth = LOCATE_parser___ReduceAction308___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30850,98 +27762,69 @@ void parser___ReduceAction278___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9210 */
+  /* parser/parser.nit:9859 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9211 */
+  /* parser/parser.nit:9860 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9212 */
+  /* parser/parser.nit:9861 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9213 */
+  /* parser/parser.nit:9862 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9214 */
+  /* parser/parser.nit:9863 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9215 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9217 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9865 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9217);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9865);
   }
-  /* ./parser//parser.nit:9219 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9867 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9219);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9867);
   }
-  /* ./parser//parser.nit:9220 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9222 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TAssign, ID_TAssign)) /*cast nullable TAssign*/;
+  /* parser/parser.nit:9869 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TAssign, ID_parser___parser_nodes___TAssign)) /*cast nullable TAssign*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9222);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9869);
   }
-  /* ./parser//parser.nit:9224 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9871 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9224);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9871);
   }
-  /* ./parser//parser.nit:9225 */
-  fra.me.REG[3] = NEW_ABraAssignExpr_parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9231 */
+  /* parser/parser.nit:9872 */
+  fra.me.REG[3] = NEW_ABraAssignExpr_parser___parser_prod___ABraAssignExpr___init_abraassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9878 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9232 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction278____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9879 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9232);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9879);
   }
-  REGB0 = ATTR_parser___ReduceAction278____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction278___init(val_t p0, val_t p1, int* init_table){
-  int itpos271 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction278].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos271]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9235;
-  fra.me.meth = LOCATE_parser___ReduceAction278___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9235 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction278____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos271] = 1;
-  return;
-}
-void parser___ReduceAction279___action(val_t p0, val_t p1){
+void parser___ReduceAction309___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9239;
-  fra.me.meth = LOCATE_parser___ReduceAction279___action;
+  fra.me.line = 9884;
+  fra.me.meth = LOCATE_parser___ReduceAction309___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -30951,94 +27834,71 @@ void parser___ReduceAction279___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9241 */
+  /* parser/parser.nit:9886 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9242 */
+  /* parser/parser.nit:9887 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9243 */
+  /* parser/parser.nit:9888 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9244 */
+  /* parser/parser.nit:9889 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9245 */
+  /* parser/parser.nit:9890 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9246 */
+  /* parser/parser.nit:9891 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9247 */
+  /* parser/parser.nit:9892 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9249 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9894 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9249);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9894);
   }
-  /* ./parser//parser.nit:9251 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:9896 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9251);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9896);
   }
-  /* ./parser//parser.nit:9253 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:9898 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9253);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9898);
   }
-  /* ./parser//parser.nit:9255 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9900 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9255);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9900);
   }
-  /* ./parser//parser.nit:9256 */
-  fra.me.REG[3] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9262 */
+  /* parser/parser.nit:9901 */
+  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9907 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9263 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction279____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9908 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9263);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9908);
   }
-  REGB0 = ATTR_parser___ReduceAction279____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction279___init(val_t p0, val_t p1, int* init_table){
-  int itpos272 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction279].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos272]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9266;
-  fra.me.meth = LOCATE_parser___ReduceAction279___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9266 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction279____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos272] = 1;
-  return;
-}
-void parser___ReduceAction280___action(val_t p0, val_t p1){
+void parser___ReduceAction310___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9270;
-  fra.me.meth = LOCATE_parser___ReduceAction280___action;
+  fra.me.line = 9913;
+  fra.me.meth = LOCATE_parser___ReduceAction310___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31048,84 +27908,61 @@ void parser___ReduceAction280___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9272 */
+  /* parser/parser.nit:9915 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9273 */
+  /* parser/parser.nit:9916 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9274 */
+  /* parser/parser.nit:9917 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9275 */
+  /* parser/parser.nit:9918 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9276 */
-  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9279 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:9919 */
+  fra.me.REG[6] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:9921 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9279);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9921);
   }
-  /* ./parser//parser.nit:9281 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:9923 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9281);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9923);
   }
-  /* ./parser//parser.nit:9283 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9925 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9283);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9925);
   }
-  /* ./parser//parser.nit:9284 */
-  fra.me.REG[3] = NEW_AAttrReassignExpr_parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9290 */
+  /* parser/parser.nit:9926 */
+  fra.me.REG[3] = NEW_AAttrReassignExpr_parser___parser_prod___AAttrReassignExpr___init_aattrreassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9932 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9291 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction280____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9933 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9291);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9933);
   }
-  REGB0 = ATTR_parser___ReduceAction280____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction280___init(val_t p0, val_t p1, int* init_table){
-  int itpos273 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction280].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos273]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9294;
-  fra.me.meth = LOCATE_parser___ReduceAction280___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9294 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction280____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos273] = 1;
-  return;
-}
-void parser___ReduceAction281___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction311___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9298;
-  fra.me.meth = LOCATE_parser___ReduceAction281___action;
+  fra.me.line = 9938;
+  fra.me.meth = LOCATE_parser___ReduceAction311___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31134,110 +27971,81 @@ void parser___ReduceAction281___action(val_t p0, val_t p1){
   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.nit:9300 */
+  /* parser/parser.nit:9940 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9301 */
+  /* parser/parser.nit:9941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9302 */
+  /* parser/parser.nit:9942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9303 */
+  /* parser/parser.nit:9943 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9304 */
+  /* parser/parser.nit:9944 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9305 */
+  /* parser/parser.nit:9945 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9306 */
+  /* parser/parser.nit:9946 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9307 */
+  /* parser/parser.nit:9947 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9308 */
-  fra.me.REG[8] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9310 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9949 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9310);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9949);
   }
-  /* ./parser//parser.nit:9312 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9951 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9312);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9951);
   }
-  /* ./parser//parser.nit:9314 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9953 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9314);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9953);
   }
-  /* ./parser//parser.nit:9315 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[5]);
-  fra.me.REG[8] = fra.me.REG[5];
-  /* ./parser//parser.nit:9317 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:9955 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9317);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9955);
   }
-  /* ./parser//parser.nit:9319 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9957 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9319);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9957);
   }
-  /* ./parser//parser.nit:9320 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[8], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9327 */
+  /* parser/parser.nit:9958 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9965 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9328 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction281____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9966 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9328);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9966);
   }
-  REGB0 = ATTR_parser___ReduceAction281____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction281___init(val_t p0, val_t p1, int* init_table){
-  int itpos274 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction281].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;
-  fra.me.line = 9331;
-  fra.me.meth = LOCATE_parser___ReduceAction281___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9331 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction281____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos274] = 1;
-  return;
-}
-void parser___ReduceAction282___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction312___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9335;
-  fra.me.meth = LOCATE_parser___ReduceAction282___action;
+  fra.me.line = 9971;
+  fra.me.meth = LOCATE_parser___ReduceAction312___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31246,100 +28054,71 @@ void parser___ReduceAction282___action(val_t p0, val_t p1){
   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.nit:9337 */
+  /* parser/parser.nit:9973 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9338 */
+  /* parser/parser.nit:9974 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9339 */
+  /* parser/parser.nit:9975 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9340 */
+  /* parser/parser.nit:9976 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9341 */
+  /* parser/parser.nit:9977 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9342 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9343 */
-  fra.me.REG[8] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:9346 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:9978 */
+  fra.me.REG[7] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:9980 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9346);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9980);
   }
-  /* ./parser//parser.nit:9348 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:9982 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9348);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9982);
   }
-  /* ./parser//parser.nit:9349 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9351 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:9984 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9984);
   }
-  /* ./parser//parser.nit:9353 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:9986 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9353);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 9986);
   }
-  /* ./parser//parser.nit:9354 */
-  fra.me.REG[3] = NEW_ACallReassignExpr_parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[8], fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9361 */
+  /* parser/parser.nit:9987 */
+  fra.me.REG[3] = NEW_ACallReassignExpr_parser___parser_prod___ACallReassignExpr___init_acallreassignexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:9994 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9362 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction282____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:9995 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9362);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9995);
   }
-  REGB0 = ATTR_parser___ReduceAction282____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction282___init(val_t p0, val_t p1, int* init_table){
-  int itpos275 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction282].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos275]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9365;
-  fra.me.meth = LOCATE_parser___ReduceAction282___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9365 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction282____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos275] = 1;
-  return;
-}
-void parser___ReduceAction283___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction313___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9369;
-  fra.me.meth = LOCATE_parser___ReduceAction283___action;
+  fra.me.line = 10000;
+  fra.me.meth = LOCATE_parser___ReduceAction313___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31347,230 +28126,155 @@ void parser___ReduceAction283___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9371 */
+  /* parser/parser.nit:10002 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9372 */
+  /* parser/parser.nit:10003 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9373 */
+  /* parser/parser.nit:10004 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9374 */
+  /* parser/parser.nit:10005 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9375 */
+  /* parser/parser.nit:10006 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9376 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9378 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10008 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9378);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10008);
   }
-  /* ./parser//parser.nit:9380 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10010 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9380);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10010);
   }
-  /* ./parser//parser.nit:9381 */
-  fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[5]);
-  fra.me.REG[7] = fra.me.REG[5];
-  /* ./parser//parser.nit:9383 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AAssignOp, ID_AAssignOp)) /*cast nullable AAssignOp*/;
+  /* parser/parser.nit:10012 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AAssignOp, ID_parser___parser_nodes___AAssignOp)) /*cast nullable AAssignOp*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9383);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10012);
   }
-  /* ./parser//parser.nit:9385 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10014 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9385);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10014);
   }
-  /* ./parser//parser.nit:9386 */
-  fra.me.REG[3] = NEW_ABraReassignExpr_parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[7], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9392 */
+  /* parser/parser.nit:10015 */
+  fra.me.REG[3] = NEW_ABraReassignExpr_parser___parser_prod___ABraReassignExpr___init_abrareassignexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10021 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9393 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction283____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10022 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9393);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10022);
   }
-  REGB0 = ATTR_parser___ReduceAction283____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction283___init(val_t p0, val_t p1, int* init_table){
-  int itpos276 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction283].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 9396;
-  fra.me.meth = LOCATE_parser___ReduceAction283___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9396 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction283____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos276] = 1;
-  return;
-}
-void parser___ReduceAction284___action(val_t p0, val_t p1){
+void parser___ReduceAction314___action(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;
-  fra.me.line = 9400;
-  fra.me.meth = LOCATE_parser___ReduceAction284___action;
+  fra.me.line = 10027;
+  fra.me.meth = LOCATE_parser___ReduceAction314___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9402 */
+  /* parser/parser.nit:10029 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9403 */
+  /* parser/parser.nit:10030 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9405 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TPluseq, ID_TPluseq)) /*cast nullable TPluseq*/;
+  /* parser/parser.nit:10032 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TPluseq, ID_parser___parser_nodes___TPluseq)) /*cast nullable TPluseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9405);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10032);
   }
-  /* ./parser//parser.nit:9406 */
-  fra.me.REG[3] = NEW_APlusAssignOp_parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:9409 */
+  /* parser/parser.nit:10033 */
+  fra.me.REG[3] = NEW_APlusAssignOp_parser___parser_prod___APlusAssignOp___init_aplusassignop(fra.me.REG[3]);
+  /* parser/parser.nit:10036 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9410 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction284____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10037 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9410);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10037);
   }
-  REGB0 = ATTR_parser___ReduceAction284____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction284___init(val_t p0, val_t p1, int* init_table){
-  int itpos277 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction284].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos277]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9413;
-  fra.me.meth = LOCATE_parser___ReduceAction284___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9413 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction284____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos277] = 1;
-  return;
-}
-void parser___ReduceAction285___action(val_t p0, val_t p1){
+void parser___ReduceAction315___action(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;
-  fra.me.line = 9417;
-  fra.me.meth = LOCATE_parser___ReduceAction285___action;
+  fra.me.line = 10042;
+  fra.me.meth = LOCATE_parser___ReduceAction315___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9419 */
+  /* parser/parser.nit:10044 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9420 */
+  /* parser/parser.nit:10045 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9422 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMinuseq, ID_TMinuseq)) /*cast nullable TMinuseq*/;
+  /* parser/parser.nit:10047 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMinuseq, ID_parser___parser_nodes___TMinuseq)) /*cast nullable TMinuseq*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10047);
   }
-  /* ./parser//parser.nit:9423 */
-  fra.me.REG[3] = NEW_AMinusAssignOp_parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
-  /* ./parser//parser.nit:9426 */
+  /* parser/parser.nit:10048 */
+  fra.me.REG[3] = NEW_AMinusAssignOp_parser___parser_prod___AMinusAssignOp___init_aminusassignop(fra.me.REG[3]);
+  /* parser/parser.nit:10051 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9427 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction285____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10052 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9427);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10052);
   }
-  REGB0 = ATTR_parser___ReduceAction285____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction285___init(val_t p0, val_t p1, int* init_table){
-  int itpos278 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction285].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 9430;
-  fra.me.meth = LOCATE_parser___ReduceAction285___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9430 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction285____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos278] = 1;
-  return;
-}
-void parser___ReduceAction286___action(val_t p0, val_t p1){
+void parser___ReduceAction316___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9434;
-  fra.me.meth = LOCATE_parser___ReduceAction286___action;
+  fra.me.line = 10057;
+  fra.me.meth = LOCATE_parser___ReduceAction316___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31579,82 +28283,59 @@ void parser___ReduceAction286___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9436 */
+  /* parser/parser.nit:10059 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9437 */
+  /* parser/parser.nit:10060 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9438 */
+  /* parser/parser.nit:10061 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9439 */
+  /* parser/parser.nit:10062 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9441 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10064 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9441);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10064);
   }
-  /* ./parser//parser.nit:9443 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10066 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10066);
   }
-  /* ./parser//parser.nit:9445 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:10068 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10068);
   }
-  /* ./parser//parser.nit:9446 */
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9451 */
+  /* parser/parser.nit:10069 */
+  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10074 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9452 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction286____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10075 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9452);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10075);
   }
-  REGB0 = ATTR_parser___ReduceAction286____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction286___init(val_t p0, val_t p1, int* init_table){
-  int itpos279 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction286].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos279]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9455;
-  fra.me.meth = LOCATE_parser___ReduceAction286___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9455 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction286____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos279] = 1;
-  return;
-}
-void parser___ReduceAction287___action(val_t p0, val_t p1){
+void parser___ReduceAction317___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9459;
-  fra.me.meth = LOCATE_parser___ReduceAction287___action;
+  fra.me.line = 10080;
+  fra.me.meth = LOCATE_parser___ReduceAction317___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31662,74 +28343,51 @@ void parser___ReduceAction287___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9461 */
+  /* parser/parser.nit:10082 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9462 */
+  /* parser/parser.nit:10083 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9463 */
+  /* parser/parser.nit:10084 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9465 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10086 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9465);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10086);
   }
-  /* ./parser//parser.nit:9467 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10088 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9467);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10088);
   }
-  /* ./parser//parser.nit:9468 */
-  fra.me.REG[3] = NEW_ADoExpr_parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9473 */
+  /* parser/parser.nit:10089 */
+  fra.me.REG[3] = NEW_ADoExpr_parser___parser_prod___ADoExpr___init_adoexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10094 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9474 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction287____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10095 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9474);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10095);
   }
-  REGB0 = ATTR_parser___ReduceAction287____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction287___init(val_t p0, val_t p1, int* init_table){
-  int itpos280 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction287].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} 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;
-  fra.me.line = 9477;
-  fra.me.meth = LOCATE_parser___ReduceAction287___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9477 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction287____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos280] = 1;
-  return;
-}
-void parser___ReduceAction288___action(val_t p0, val_t p1){
+void parser___ReduceAction318___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9481;
-  fra.me.meth = LOCATE_parser___ReduceAction288___action;
+  fra.me.line = 10100;
+  fra.me.meth = LOCATE_parser___ReduceAction318___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31739,98 +28397,75 @@ void parser___ReduceAction288___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9483 */
+  /* parser/parser.nit:10102 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9484 */
+  /* parser/parser.nit:10103 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9485 */
+  /* parser/parser.nit:10104 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9486 */
+  /* parser/parser.nit:10105 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9487 */
+  /* parser/parser.nit:10106 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9488 */
+  /* parser/parser.nit:10107 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9489 */
+  /* parser/parser.nit:10108 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9490 */
+  /* parser/parser.nit:10109 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9491 */
+  /* parser/parser.nit:10110 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9493 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9493);
-  }
-  /* ./parser//parser.nit:9495 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10112 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9495);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10112);
   }
-  /* ./parser//parser.nit:9497 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10114 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9497);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10114);
   }
-  /* ./parser//parser.nit:9499 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9499);
-  }
-  /* ./parser//parser.nit:9500 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9506 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9507 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction288____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10116 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9507);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10116);
   }
-  REGB0 = ATTR_parser___ReduceAction288____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction288___init(val_t p0, val_t p1, int* init_table){
-  int itpos281 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction288].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos281]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9510;
-  fra.me.meth = LOCATE_parser___ReduceAction288___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9510 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction288____goto(fra.me.REG[1]) = REGB0;
+  /* parser/parser.nit:10118 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10118);
+  }
+  /* parser/parser.nit:10119 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10125 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:10126 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10126);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos281] = 1;
   return;
 }
-void parser___ReduceAction289___action(val_t p0, val_t p1){
+void parser___ReduceAction319___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9514;
-  fra.me.meth = LOCATE_parser___ReduceAction289___action;
+  fra.me.line = 10131;
+  fra.me.meth = LOCATE_parser___ReduceAction319___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31839,88 +28474,65 @@ void parser___ReduceAction289___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9516 */
+  /* parser/parser.nit:10133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9517 */
+  /* parser/parser.nit:10134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9518 */
+  /* parser/parser.nit:10135 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9519 */
+  /* parser/parser.nit:10136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9520 */
+  /* parser/parser.nit:10137 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9521 */
+  /* parser/parser.nit:10138 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9522 */
+  /* parser/parser.nit:10139 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9524 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:10141 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9524);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10141);
   }
-  /* ./parser//parser.nit:9526 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10143 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9526);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10143);
   }
-  /* ./parser//parser.nit:9528 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10145 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10145);
   }
-  /* ./parser//parser.nit:9529 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9535 */
+  /* parser/parser.nit:10146 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10152 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9536 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction289____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10153 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9536);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10153);
   }
-  REGB0 = ATTR_parser___ReduceAction289____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction289___init(val_t p0, val_t p1, int* init_table){
-  int itpos282 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction289].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos282]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9539;
-  fra.me.meth = LOCATE_parser___ReduceAction289___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9539 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction289____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos282] = 1;
-  return;
-}
-void parser___ReduceAction290___action(val_t p0, val_t p1){
+void parser___ReduceAction320___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9543;
-  fra.me.meth = LOCATE_parser___ReduceAction290___action;
+  fra.me.line = 10158;
+  fra.me.meth = LOCATE_parser___ReduceAction320___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -31930,98 +28542,75 @@ void parser___ReduceAction290___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9545 */
+  /* parser/parser.nit:10160 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9546 */
+  /* parser/parser.nit:10161 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9547 */
+  /* parser/parser.nit:10162 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9548 */
+  /* parser/parser.nit:10163 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9549 */
+  /* parser/parser.nit:10164 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9550 */
+  /* parser/parser.nit:10165 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9551 */
+  /* parser/parser.nit:10166 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9552 */
+  /* parser/parser.nit:10167 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9553 */
+  /* parser/parser.nit:10168 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9555 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:10170 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9555);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10170);
   }
-  /* ./parser//parser.nit:9557 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10172 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9557);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10172);
   }
-  /* ./parser//parser.nit:9559 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10174 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9559);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10174);
   }
-  /* ./parser//parser.nit:9561 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10176 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9561);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10176);
   }
-  /* ./parser//parser.nit:9562 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9568 */
+  /* parser/parser.nit:10177 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10183 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9569 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction290____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10184 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9569);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10184);
   }
-  REGB0 = ATTR_parser___ReduceAction290____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction290___init(val_t p0, val_t p1, int* init_table){
-  int itpos283 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction290].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos283]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9572;
-  fra.me.meth = LOCATE_parser___ReduceAction290___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9572 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction290____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos283] = 1;
-  return;
-}
-void parser___ReduceAction291___action(val_t p0, val_t p1){
+void parser___ReduceAction321___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9576;
-  fra.me.meth = LOCATE_parser___ReduceAction291___action;
+  fra.me.line = 10189;
+  fra.me.meth = LOCATE_parser___ReduceAction321___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32030,88 +28619,65 @@ void parser___ReduceAction291___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9578 */
+  /* parser/parser.nit:10191 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9579 */
+  /* parser/parser.nit:10192 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9580 */
+  /* parser/parser.nit:10193 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9581 */
+  /* parser/parser.nit:10194 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9582 */
+  /* parser/parser.nit:10195 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9583 */
+  /* parser/parser.nit:10196 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9584 */
+  /* parser/parser.nit:10197 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9586 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:10199 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9586);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10199);
   }
-  /* ./parser//parser.nit:9588 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10201 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9588);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10201);
   }
-  /* ./parser//parser.nit:9590 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10203 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9590);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10203);
   }
-  /* ./parser//parser.nit:9591 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:9597 */
+  /* parser/parser.nit:10204 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10210 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9598 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction291____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10211 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10211);
   }
-  REGB0 = ATTR_parser___ReduceAction291____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction291___init(val_t p0, val_t p1, int* init_table){
-  int itpos284 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction291].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos284]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9601;
-  fra.me.meth = LOCATE_parser___ReduceAction291___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9601 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction291____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos284] = 1;
-  return;
-}
-void parser___ReduceAction292___action(val_t p0, val_t p1){
+void parser___ReduceAction322___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9605;
-  fra.me.meth = LOCATE_parser___ReduceAction292___action;
+  fra.me.line = 10216;
+  fra.me.meth = LOCATE_parser___ReduceAction322___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32120,90 +28686,67 @@ void parser___ReduceAction292___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9607 */
+  /* parser/parser.nit:10218 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9608 */
+  /* parser/parser.nit:10219 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9609 */
+  /* parser/parser.nit:10220 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9610 */
+  /* parser/parser.nit:10221 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9611 */
+  /* parser/parser.nit:10222 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9612 */
+  /* parser/parser.nit:10223 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9613 */
+  /* parser/parser.nit:10224 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9614 */
+  /* parser/parser.nit:10225 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9616 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:10227 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9616);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10227);
   }
-  /* ./parser//parser.nit:9618 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10229 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9618);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10229);
   }
-  /* ./parser//parser.nit:9620 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10231 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9620);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10231);
   }
-  /* ./parser//parser.nit:9621 */
-  fra.me.REG[3] = NEW_AIfExpr_parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
-  /* ./parser//parser.nit:9627 */
+  /* parser/parser.nit:10232 */
+  fra.me.REG[3] = NEW_AIfExpr_parser___parser_prod___AIfExpr___init_aifexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:10238 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9628 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction292____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10239 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9628);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10239);
   }
-  REGB0 = ATTR_parser___ReduceAction292____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction292___init(val_t p0, val_t p1, int* init_table){
-  int itpos285 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction292].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos285]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9631;
-  fra.me.meth = LOCATE_parser___ReduceAction292___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9631 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction292____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos285] = 1;
-  return;
-}
-void parser___ReduceAction295___action(val_t p0, val_t p1){
+void parser___ReduceAction325___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9635;
-  fra.me.meth = LOCATE_parser___ReduceAction295___action;
+  fra.me.line = 10244;
+  fra.me.meth = LOCATE_parser___ReduceAction325___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32212,82 +28755,59 @@ void parser___ReduceAction295___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9637 */
+  /* parser/parser.nit:10246 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9638 */
+  /* parser/parser.nit:10247 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9639 */
+  /* parser/parser.nit:10248 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9640 */
+  /* parser/parser.nit:10249 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9642 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
+  /* parser/parser.nit:10251 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9642);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10251);
   }
-  /* ./parser//parser.nit:9644 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10253 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9644);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10253);
   }
-  /* ./parser//parser.nit:9646 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:10255 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9646);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10255);
   }
-  /* ./parser//parser.nit:9647 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9652 */
+  /* parser/parser.nit:10256 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10261 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9653 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction295____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10262 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9653);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10262);
   }
-  REGB0 = ATTR_parser___ReduceAction295____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction295___init(val_t p0, val_t p1, int* init_table){
-  int itpos286 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction295].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos286]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9656;
-  fra.me.meth = LOCATE_parser___ReduceAction295___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9656 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction295____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos286] = 1;
-  return;
-}
-void parser___ReduceAction296___action(val_t p0, val_t p1){
+void parser___ReduceAction326___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9660;
-  fra.me.meth = LOCATE_parser___ReduceAction296___action;
+  fra.me.line = 10267;
+  fra.me.meth = LOCATE_parser___ReduceAction326___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32295,74 +28815,51 @@ void parser___ReduceAction296___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9662 */
+  /* parser/parser.nit:10269 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9663 */
+  /* parser/parser.nit:10270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9664 */
+  /* parser/parser.nit:10271 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9666 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwloop, ID_TKwloop)) /*cast nullable TKwloop*/;
+  /* parser/parser.nit:10273 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwloop, ID_parser___parser_nodes___TKwloop)) /*cast nullable TKwloop*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9666);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10273);
   }
-  /* ./parser//parser.nit:9668 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10275 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9668);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10275);
   }
-  /* ./parser//parser.nit:9669 */
-  fra.me.REG[3] = NEW_ALoopExpr_parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9674 */
+  /* parser/parser.nit:10276 */
+  fra.me.REG[3] = NEW_ALoopExpr_parser___parser_prod___ALoopExpr___init_aloopexpr(fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10281 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9675 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction296____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10282 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9675);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10282);
   }
-  REGB0 = ATTR_parser___ReduceAction296____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction296___init(val_t p0, val_t p1, int* init_table){
-  int itpos287 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction296].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos287]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9678;
-  fra.me.meth = LOCATE_parser___ReduceAction296___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9678 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction296____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos287] = 1;
-  return;
-}
-void parser___ReduceAction297___action(val_t p0, val_t p1){
+void parser___ReduceAction327___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9682;
-  fra.me.meth = LOCATE_parser___ReduceAction297___action;
+  fra.me.line = 10287;
+  fra.me.meth = LOCATE_parser___ReduceAction327___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32373,102 +28870,79 @@ void parser___ReduceAction297___action(val_t p0, val_t p1){
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9684 */
+  /* parser/parser.nit:10289 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9685 */
+  /* parser/parser.nit:10290 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9686 */
+  /* parser/parser.nit:10291 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9687 */
+  /* parser/parser.nit:10292 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9688 */
+  /* parser/parser.nit:10293 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9689 */
+  /* parser/parser.nit:10294 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9690 */
+  /* parser/parser.nit:10295 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9691 */
+  /* parser/parser.nit:10296 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9693 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
+  /* parser/parser.nit:10298 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9693);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10298);
   }
-  /* ./parser//parser.nit:9695 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10300 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9695);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10300);
   }
-  /* ./parser//parser.nit:9697 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10302 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9697);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10302);
   }
-  /* ./parser//parser.nit:9699 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10304 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9699);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10304);
   }
-  /* ./parser//parser.nit:9701 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:10306 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9701);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10306);
   }
-  /* ./parser//parser.nit:9702 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9709 */
+  /* parser/parser.nit:10307 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10314 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9710 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction297____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10315 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10315);
   }
-  REGB0 = ATTR_parser___ReduceAction297____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction297___init(val_t p0, val_t p1, int* init_table){
-  int itpos288 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction297].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos288]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9713;
-  fra.me.meth = LOCATE_parser___ReduceAction297___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9713 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction297____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos288] = 1;
-  return;
-}
-void parser___ReduceAction298___action(val_t p0, val_t p1){
+void parser___ReduceAction328___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9717;
-  fra.me.meth = LOCATE_parser___ReduceAction298___action;
+  fra.me.line = 10320;
+  fra.me.meth = LOCATE_parser___ReduceAction328___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32478,94 +28952,179 @@ void parser___ReduceAction298___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9719 */
+  /* parser/parser.nit:10322 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9720 */
+  /* parser/parser.nit:10323 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9721 */
+  /* parser/parser.nit:10324 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9722 */
+  /* parser/parser.nit:10325 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9723 */
+  /* parser/parser.nit:10326 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9724 */
+  /* parser/parser.nit:10327 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9725 */
+  /* parser/parser.nit:10328 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9727 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwwhile, ID_TKwwhile)) /*cast nullable TKwwhile*/;
+  /* parser/parser.nit:10330 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwwhile, ID_parser___parser_nodes___TKwwhile)) /*cast nullable TKwwhile*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9727);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10330);
   }
-  /* ./parser//parser.nit:9729 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10332 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9729);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10332);
   }
-  /* ./parser//parser.nit:9731 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10334 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9731);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10334);
   }
-  /* ./parser//parser.nit:9733 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10336 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9733);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10336);
   }
-  /* ./parser//parser.nit:9734 */
-  fra.me.REG[3] = NEW_AWhileExpr_parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9741 */
+  /* parser/parser.nit:10337 */
+  fra.me.REG[3] = NEW_AWhileExpr_parser___parser_prod___AWhileExpr___init_awhileexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10344 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9742 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction298____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10345 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9742);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10345);
   }
-  REGB0 = ATTR_parser___ReduceAction298____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction298___init(val_t p0, val_t p1, int* init_table){
-  int itpos289 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction298].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction329___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos289]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9745;
-  fra.me.meth = LOCATE_parser___ReduceAction298___init;
+  fra.me.line = 10350;
+  fra.me.meth = LOCATE_parser___ReduceAction329___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9745 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction298____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:10352 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:10353 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10354 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10355 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10356 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10357 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10358 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10359 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10360 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10361 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10362 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10363 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10364 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10365 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10366 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:10368 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10368);
+  }
+  /* parser/parser.nit:10370 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10370);
+  }
+  /* parser/parser.nit:10371 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
+  fra.me.REG[9] = fra.me.REG[7];
+  /* parser/parser.nit:10373 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10373);
+  }
+  /* parser/parser.nit:10375 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10375);
+  }
+  /* parser/parser.nit:10377 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10377);
+  }
+  /* parser/parser.nit:10379 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10379);
+  }
+  /* parser/parser.nit:10380 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10388 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:10389 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10389);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos289] = 1;
   return;
 }
-void parser___ReduceAction299___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
+void parser___ReduceAction330___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[9];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9749;
-  fra.me.meth = LOCATE_parser___ReduceAction299___action;
+  fra.me.line = 10394;
+  fra.me.meth = LOCATE_parser___ReduceAction330___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 9;
+  fra.me.REG_size = 10;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32575,118 +29134,200 @@ void parser___ReduceAction299___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[7] = NIT_NULL;
   fra.me.REG[8] = NIT_NULL;
+  fra.me.REG[9] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9751 */
+  /* parser/parser.nit:10396 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9752 */
+  /* parser/parser.nit:10397 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9753 */
+  /* parser/parser.nit:10398 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9754 */
+  /* parser/parser.nit:10399 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9755 */
+  /* parser/parser.nit:10400 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9756 */
+  /* parser/parser.nit:10401 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9757 */
+  /* parser/parser.nit:10402 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9758 */
+  /* parser/parser.nit:10403 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9759 */
+  /* parser/parser.nit:10404 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9760 */
+  /* parser/parser.nit:10405 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9761 */
+  /* parser/parser.nit:10406 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9762 */
+  /* parser/parser.nit:10407 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9764 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
+  /* parser/parser.nit:10408 */
+  fra.me.REG[9] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:10410 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9764);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10410);
   }
-  /* ./parser//parser.nit:9766 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:10412 */
+  REGB0 = TAG_Bool((fra.me.REG[7]!=NIT_NULL) && VAL_ISA(fra.me.REG[7], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9766);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10412);
   }
-  /* ./parser//parser.nit:9768 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10413 */
+  fra.me.REG[7] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[9], fra.me.REG[7]);
+  fra.me.REG[9] = fra.me.REG[7];
+  /* parser/parser.nit:10415 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9768);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10415);
   }
-  /* ./parser//parser.nit:9770 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10417 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9770);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10417);
   }
-  /* ./parser//parser.nit:9772 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10419 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9772);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10419);
   }
-  /* ./parser//parser.nit:9774 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_ALabel, ID_ALabel)) /*cast nullable ALabel*/;
+  /* parser/parser.nit:10421 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___ALabel, ID_parser___parser_nodes___ALabel)) /*cast nullable ALabel*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9774);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10421);
   }
-  /* ./parser//parser.nit:9775 */
-  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9783 */
+  /* parser/parser.nit:10422 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[8], fra.me.REG[9], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10430 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9784 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction299____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10431 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9784);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10431);
   }
-  REGB0 = ATTR_parser___ReduceAction299____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction299___init(val_t p0, val_t p1, int* init_table){
-  int itpos290 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction299].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction331___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos290]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9787;
-  fra.me.meth = LOCATE_parser___ReduceAction299___init;
+  fra.me.line = 10436;
+  fra.me.meth = LOCATE_parser___ReduceAction331___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  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;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9787 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction299____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:10438 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:10439 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10440 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10441 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10442 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10443 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10444 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10445 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10446 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10447 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10448 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10449 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10450 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:10451 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:10453 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10453);
+  }
+  /* parser/parser.nit:10455 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10455);
+  }
+  /* parser/parser.nit:10456 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[6]);
+  fra.me.REG[8] = fra.me.REG[6];
+  /* parser/parser.nit:10458 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10458);
+  }
+  /* parser/parser.nit:10460 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10460);
+  }
+  /* parser/parser.nit:10462 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10462);
+  }
+  /* parser/parser.nit:10463 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10471 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:10472 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10472);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos290] = 1;
   return;
 }
-void parser___ReduceAction300___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction332___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9791;
-  fra.me.meth = LOCATE_parser___ReduceAction300___action;
+  fra.me.line = 10477;
+  fra.me.meth = LOCATE_parser___ReduceAction332___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32695,110 +29336,93 @@ void parser___ReduceAction300___action(val_t p0, val_t p1){
   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.nit:9793 */
+  /* parser/parser.nit:10479 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9794 */
+  /* parser/parser.nit:10480 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9795 */
+  /* parser/parser.nit:10481 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9796 */
+  /* parser/parser.nit:10482 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9797 */
+  /* parser/parser.nit:10483 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9798 */
+  /* parser/parser.nit:10484 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9799 */
+  /* parser/parser.nit:10485 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9800 */
+  /* parser/parser.nit:10486 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9801 */
+  /* parser/parser.nit:10487 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9802 */
+  /* parser/parser.nit:10488 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9803 */
+  /* parser/parser.nit:10489 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9805 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_TKwfor, ID_TKwfor)) /*cast nullable TKwfor*/;
+  /* parser/parser.nit:10490 */
+  fra.me.REG[8] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:10492 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwfor, ID_parser___parser_nodes___TKwfor)) /*cast nullable TKwfor*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9805);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10492);
   }
-  /* ./parser//parser.nit:9807 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:10494 */
+  REGB0 = TAG_Bool((fra.me.REG[6]!=NIT_NULL) && VAL_ISA(fra.me.REG[6], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9807);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10494);
   }
-  /* ./parser//parser.nit:9809 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10495 */
+  fra.me.REG[6] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[8], fra.me.REG[6]);
+  fra.me.REG[8] = fra.me.REG[6];
+  /* parser/parser.nit:10497 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9809);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10497);
   }
-  /* ./parser//parser.nit:9811 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwdo, ID_TKwdo)) /*cast nullable TKwdo*/;
+  /* parser/parser.nit:10499 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwdo, ID_parser___parser_nodes___TKwdo)) /*cast nullable TKwdo*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9811);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10499);
   }
-  /* ./parser//parser.nit:9813 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10501 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9813);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10501);
   }
-  /* ./parser//parser.nit:9814 */
-  fra.me.REG[3] = NEW_AForExpr_parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9822 */
+  /* parser/parser.nit:10502 */
+  fra.me.REG[3] = NEW_AForExpr_parser___parser_prod___AForExpr___init_aforexpr(fra.me.REG[7], fra.me.REG[8], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10510 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9823 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction300____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10511 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9823);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10511);
   }
-  REGB0 = ATTR_parser___ReduceAction300____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction300___init(val_t p0, val_t p1, int* init_table){
-  int itpos291 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction300].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos291]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9826;
-  fra.me.meth = LOCATE_parser___ReduceAction300___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9826 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction300____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos291] = 1;
-  return;
-}
-void parser___ReduceAction301___action(val_t p0, val_t p1){
+void parser___ReduceAction333___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9830;
-  fra.me.meth = LOCATE_parser___ReduceAction301___action;
+  fra.me.line = 10516;
+  fra.me.meth = LOCATE_parser___ReduceAction333___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32807,84 +29431,61 @@ void parser___ReduceAction301___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9832 */
+  /* parser/parser.nit:10518 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9833 */
+  /* parser/parser.nit:10519 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9834 */
+  /* parser/parser.nit:10520 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9835 */
+  /* parser/parser.nit:10521 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9836 */
+  /* parser/parser.nit:10522 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9838 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:10524 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10524);
   }
-  /* ./parser//parser.nit:9840 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10526 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9840);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10526);
   }
-  /* ./parser//parser.nit:9842 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10528 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9842);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10528);
   }
-  /* ./parser//parser.nit:9843 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9849 */
+  /* parser/parser.nit:10529 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10535 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9850 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction301____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10536 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9850);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10536);
   }
-  REGB0 = ATTR_parser___ReduceAction301____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction301___init(val_t p0, val_t p1, int* init_table){
-  int itpos292 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction301].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos292]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9853;
-  fra.me.meth = LOCATE_parser___ReduceAction301___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9853 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction301____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos292] = 1;
-  return;
-}
-void parser___ReduceAction302___action(val_t p0, val_t p1){
+void parser___ReduceAction334___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9857;
-  fra.me.meth = LOCATE_parser___ReduceAction302___action;
+  fra.me.line = 10541;
+  fra.me.meth = LOCATE_parser___ReduceAction334___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32894,92 +29495,69 @@ void parser___ReduceAction302___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9859 */
+  /* parser/parser.nit:10543 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9860 */
+  /* parser/parser.nit:10544 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9861 */
+  /* parser/parser.nit:10545 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9862 */
+  /* parser/parser.nit:10546 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9863 */
+  /* parser/parser.nit:10547 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9864 */
+  /* parser/parser.nit:10548 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9866 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:10550 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9866);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10550);
   }
-  /* ./parser//parser.nit:9868 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:10552 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9868);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10552);
   }
-  /* ./parser//parser.nit:9870 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10554 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9870);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10554);
   }
-  /* ./parser//parser.nit:9872 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10556 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10556);
   }
-  /* ./parser//parser.nit:9873 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:9879 */
+  /* parser/parser.nit:10557 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10563 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9880 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction302____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10564 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9880);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10564);
   }
-  REGB0 = ATTR_parser___ReduceAction302____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction302___init(val_t p0, val_t p1, int* init_table){
-  int itpos293 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction302].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos293]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9883;
-  fra.me.meth = LOCATE_parser___ReduceAction302___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9883 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction302____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos293] = 1;
-  return;
-}
-void parser___ReduceAction303___action(val_t p0, val_t p1){
+void parser___ReduceAction335___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9887;
-  fra.me.meth = LOCATE_parser___ReduceAction303___action;
+  fra.me.line = 10569;
+  fra.me.meth = LOCATE_parser___ReduceAction335___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -32987,74 +29565,51 @@ void parser___ReduceAction303___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9889 */
+  /* parser/parser.nit:10571 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9890 */
+  /* parser/parser.nit:10572 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9891 */
+  /* parser/parser.nit:10573 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9893 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:10575 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10575);
   }
-  /* ./parser//parser.nit:9895 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10577 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9895);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10577);
   }
-  /* ./parser//parser.nit:9896 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9902 */
+  /* parser/parser.nit:10578 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[4], NIT_NULL, fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10584 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9903 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction303____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10585 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9903);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10585);
   }
-  REGB0 = ATTR_parser___ReduceAction303____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction303___init(val_t p0, val_t p1, int* init_table){
-  int itpos294 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction303].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos294]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9906;
-  fra.me.meth = LOCATE_parser___ReduceAction303___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9906 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction303____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos294] = 1;
-  return;
-}
-void parser___ReduceAction304___action(val_t p0, val_t p1){
+void parser___ReduceAction336___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9910;
-  fra.me.meth = LOCATE_parser___ReduceAction304___action;
+  fra.me.line = 10590;
+  fra.me.meth = LOCATE_parser___ReduceAction336___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33063,142 +29618,96 @@ void parser___ReduceAction304___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9912 */
+  /* parser/parser.nit:10592 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9913 */
+  /* parser/parser.nit:10593 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9914 */
+  /* parser/parser.nit:10594 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9915 */
+  /* parser/parser.nit:10595 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9917 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwassert, ID_TKwassert)) /*cast nullable TKwassert*/;
+  /* parser/parser.nit:10597 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwassert, ID_parser___parser_nodes___TKwassert)) /*cast nullable TKwassert*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9917);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10597);
   }
-  /* ./parser//parser.nit:9919 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:10599 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9919);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10599);
   }
-  /* ./parser//parser.nit:9921 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10601 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9921);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10601);
   }
-  /* ./parser//parser.nit:9922 */
-  fra.me.REG[3] = NEW_AAssertExpr_parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
-  /* ./parser//parser.nit:9928 */
+  /* parser/parser.nit:10602 */
+  fra.me.REG[3] = NEW_AAssertExpr_parser___parser_prod___AAssertExpr___init_aassertexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], NIT_NULL);
+  /* parser/parser.nit:10608 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9929 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction304____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10609 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9929);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10609);
   }
-  REGB0 = ATTR_parser___ReduceAction304____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction304___init(val_t p0, val_t p1, int* init_table){
-  int itpos295 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction304].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos295]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9932;
-  fra.me.meth = LOCATE_parser___ReduceAction304___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9932 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction304____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos295] = 1;
-  return;
-}
-void parser___ReduceAction305___action(val_t p0, val_t p1){
+void parser___ReduceAction337___action(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;
-  fra.me.line = 9936;
-  fra.me.meth = LOCATE_parser___ReduceAction305___action;
+  fra.me.line = 10614;
+  fra.me.meth = LOCATE_parser___ReduceAction337___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9938 */
+  /* parser/parser.nit:10616 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9939 */
+  /* parser/parser.nit:10617 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9940 */
+  /* parser/parser.nit:10618 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9942 */
+  /* parser/parser.nit:10620 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:9943 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction305____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10621 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9943);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10621);
   }
-  REGB0 = ATTR_parser___ReduceAction305____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction305___init(val_t p0, val_t p1, int* init_table){
-  int itpos296 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction305].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos296]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9946;
-  fra.me.meth = LOCATE_parser___ReduceAction305___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9946 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction305____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos296] = 1;
-  return;
-}
-void parser___ReduceAction309___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction341___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9950;
-  fra.me.meth = LOCATE_parser___ReduceAction309___action;
+  fra.me.line = 10626;
+  fra.me.meth = LOCATE_parser___ReduceAction341___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33206,95 +29715,66 @@ void parser___ReduceAction309___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9952 */
+  /* parser/parser.nit:10628 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9953 */
+  /* parser/parser.nit:10629 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9954 */
+  /* parser/parser.nit:10630 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9955 */
+  /* parser/parser.nit:10631 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9956 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9957 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:9959 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10632 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:10634 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9959);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10634);
   }
-  /* ./parser//parser.nit:9961 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10636 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9961);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10636);
   }
-  /* ./parser//parser.nit:9962 */
-  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
-  fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:9964 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:10638 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9964);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10638);
   }
-  /* ./parser//parser.nit:9965 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:9966 */
-  fra.me.REG[7] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:9971 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:9972 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction309____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10639 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
+  fra.me.REG[6] = fra.me.REG[3];
+  /* parser/parser.nit:10640 */
+  fra.me.REG[6] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
+  /* parser/parser.nit:10645 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:10646 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 9972);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10646);
   }
-  REGB0 = ATTR_parser___ReduceAction309____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction309___init(val_t p0, val_t p1, int* init_table){
-  int itpos297 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction309].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos297]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 9975;
-  fra.me.meth = LOCATE_parser___ReduceAction309___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:9975 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction309____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos297] = 1;
-  return;
-}
-void parser___ReduceAction311___action(val_t p0, val_t p1){
+void parser___ReduceAction343___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 9979;
-  fra.me.meth = LOCATE_parser___ReduceAction311___action;
+  fra.me.line = 10651;
+  fra.me.meth = LOCATE_parser___ReduceAction343___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33306,116 +29786,93 @@ void parser___ReduceAction311___action(val_t p0, val_t p1){
   fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:9981 */
+  /* parser/parser.nit:10653 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:9982 */
+  /* parser/parser.nit:10654 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9983 */
+  /* parser/parser.nit:10655 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9984 */
+  /* parser/parser.nit:10656 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9985 */
+  /* parser/parser.nit:10657 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9986 */
+  /* parser/parser.nit:10658 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9987 */
+  /* parser/parser.nit:10659 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9988 */
+  /* parser/parser.nit:10660 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9989 */
+  /* parser/parser.nit:10661 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9990 */
+  /* parser/parser.nit:10662 */
   fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9991 */
+  /* parser/parser.nit:10663 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9992 */
+  /* parser/parser.nit:10664 */
   fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:9994 */
-  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_TKwif, ID_TKwif)) /*cast nullable TKwif*/;
+  /* parser/parser.nit:10666 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___TKwif, ID_parser___parser_nodes___TKwif)) /*cast nullable TKwif*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10666);
   }
-  /* ./parser//parser.nit:9996 */
-  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10668 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10668);
   }
-  /* ./parser//parser.nit:9998 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwthen, ID_TKwthen)) /*cast nullable TKwthen*/;
+  /* parser/parser.nit:10670 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwthen, ID_parser___parser_nodes___TKwthen)) /*cast nullable TKwthen*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 9998);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10670);
   }
-  /* ./parser//parser.nit:10000 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10672 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10000);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10672);
   }
-  /* ./parser//parser.nit:10002 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwelse, ID_TKwelse)) /*cast nullable TKwelse*/;
+  /* parser/parser.nit:10674 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwelse, ID_parser___parser_nodes___TKwelse)) /*cast nullable TKwelse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10002);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10674);
   }
-  /* ./parser//parser.nit:10004 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10676 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10004);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10676);
   }
-  /* ./parser//parser.nit:10005 */
-  fra.me.REG[3] = NEW_AIfexprExpr_parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10013 */
+  /* parser/parser.nit:10677 */
+  fra.me.REG[3] = NEW_AIfexprExpr_parser___parser_prod___AIfexprExpr___init_aifexprexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10685 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10014 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction311____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10686 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10014);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10686);
   }
-  REGB0 = ATTR_parser___ReduceAction311____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction311___init(val_t p0, val_t p1, int* init_table){
-  int itpos298 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction311].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos298]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10017;
-  fra.me.meth = LOCATE_parser___ReduceAction311___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10017 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction311____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos298] = 1;
-  return;
-}
-void parser___ReduceAction313___action(val_t p0, val_t p1){
+void parser___ReduceAction345___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10021;
-  fra.me.meth = LOCATE_parser___ReduceAction313___action;
+  fra.me.line = 10691;
+  fra.me.meth = LOCATE_parser___ReduceAction345___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33423,78 +29880,55 @@ void parser___ReduceAction313___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10023 */
+  /* parser/parser.nit:10693 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10024 */
+  /* parser/parser.nit:10694 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10025 */
+  /* parser/parser.nit:10695 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10026 */
+  /* parser/parser.nit:10696 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10027 */
+  /* parser/parser.nit:10697 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10029 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10699 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10029);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10699);
   }
-  /* ./parser//parser.nit:10031 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10701 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10031);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10701);
   }
-  /* ./parser//parser.nit:10032 */
-  fra.me.REG[3] = NEW_AOrExpr_parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10036 */
+  /* parser/parser.nit:10702 */
+  fra.me.REG[3] = NEW_AOrExpr_parser___parser_prod___AOrExpr___init_aorexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10706 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10037 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction313____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10707 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10037);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10707);
   }
-  REGB0 = ATTR_parser___ReduceAction313____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction313___init(val_t p0, val_t p1, int* init_table){
-  int itpos299 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction313].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos299]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10040;
-  fra.me.meth = LOCATE_parser___ReduceAction313___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10040 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction313____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos299] = 1;
-  return;
-}
-void parser___ReduceAction314___action(val_t p0, val_t p1){
+void parser___ReduceAction346___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10044;
-  fra.me.meth = LOCATE_parser___ReduceAction314___action;
+  fra.me.line = 10712;
+  fra.me.meth = LOCATE_parser___ReduceAction346___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33502,78 +29936,55 @@ void parser___ReduceAction314___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10046 */
+  /* parser/parser.nit:10714 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10047 */
+  /* parser/parser.nit:10715 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10048 */
+  /* parser/parser.nit:10716 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10049 */
+  /* parser/parser.nit:10717 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10050 */
+  /* parser/parser.nit:10718 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10052 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10720 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10720);
   }
-  /* ./parser//parser.nit:10054 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10722 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10054);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10722);
   }
-  /* ./parser//parser.nit:10055 */
-  fra.me.REG[3] = NEW_AAndExpr_parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10059 */
+  /* parser/parser.nit:10723 */
+  fra.me.REG[3] = NEW_AAndExpr_parser___parser_prod___AAndExpr___init_aandexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10727 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10060 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction314____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10728 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10060);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10728);
   }
-  REGB0 = ATTR_parser___ReduceAction314____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction314___init(val_t p0, val_t p1, int* init_table){
-  int itpos300 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction314].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos300]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10063;
-  fra.me.meth = LOCATE_parser___ReduceAction314___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10063 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction314____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos300] = 1;
-  return;
-}
-void parser___ReduceAction315___action(val_t p0, val_t p1){
+void parser___ReduceAction347___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10067;
-  fra.me.meth = LOCATE_parser___ReduceAction315___action;
+  fra.me.line = 10733;
+  fra.me.meth = LOCATE_parser___ReduceAction347___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33581,80 +29992,57 @@ void parser___ReduceAction315___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10069 */
+  /* parser/parser.nit:10735 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10070 */
+  /* parser/parser.nit:10736 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10071 */
+  /* parser/parser.nit:10737 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10072 */
+  /* parser/parser.nit:10738 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10073 */
+  /* parser/parser.nit:10739 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10074 */
+  /* parser/parser.nit:10740 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10076 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10742 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10076);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10742);
   }
-  /* ./parser//parser.nit:10078 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10744 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10078);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10744);
   }
-  /* ./parser//parser.nit:10079 */
-  fra.me.REG[3] = NEW_AOrElseExpr_parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10083 */
+  /* parser/parser.nit:10745 */
+  fra.me.REG[3] = NEW_AOrElseExpr_parser___parser_prod___AOrElseExpr___init_aorelseexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10749 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10084 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction315____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10750 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10084);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10750);
   }
-  REGB0 = ATTR_parser___ReduceAction315____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction315___init(val_t p0, val_t p1, int* init_table){
-  int itpos301 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction315].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos301]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10087;
-  fra.me.meth = LOCATE_parser___ReduceAction315___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10087 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction315____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos301] = 1;
-  return;
-}
-void parser___ReduceAction317___action(val_t p0, val_t p1){
+void parser___ReduceAction349___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10091;
-  fra.me.meth = LOCATE_parser___ReduceAction317___action;
+  fra.me.line = 10755;
+  fra.me.meth = LOCATE_parser___ReduceAction349___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33662,76 +30050,53 @@ void parser___ReduceAction317___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10093 */
+  /* parser/parser.nit:10757 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10094 */
+  /* parser/parser.nit:10758 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10095 */
+  /* parser/parser.nit:10759 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10096 */
+  /* parser/parser.nit:10760 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10098 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* parser/parser.nit:10762 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10098);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10762);
   }
-  /* ./parser//parser.nit:10100 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10764 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10100);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10764);
   }
-  /* ./parser//parser.nit:10101 */
-  fra.me.REG[3] = NEW_ANotExpr_parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10105 */
+  /* parser/parser.nit:10765 */
+  fra.me.REG[3] = NEW_ANotExpr_parser___parser_prod___ANotExpr___init_anotexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10769 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10106 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction317____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10770 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10106);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10770);
   }
-  REGB0 = ATTR_parser___ReduceAction317____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction317___init(val_t p0, val_t p1, int* init_table){
-  int itpos302 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction317].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos302]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10109;
-  fra.me.meth = LOCATE_parser___ReduceAction317___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10109 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction317____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos302] = 1;
-  return;
-}
-void parser___ReduceAction319___action(val_t p0, val_t p1){
+void parser___ReduceAction351___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10113;
-  fra.me.meth = LOCATE_parser___ReduceAction319___action;
+  fra.me.line = 10775;
+  fra.me.meth = LOCATE_parser___ReduceAction351___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33739,78 +30104,55 @@ void parser___ReduceAction319___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10115 */
+  /* parser/parser.nit:10777 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10116 */
+  /* parser/parser.nit:10778 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10117 */
+  /* parser/parser.nit:10779 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10118 */
+  /* parser/parser.nit:10780 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10119 */
+  /* parser/parser.nit:10781 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10121 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10783 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10121);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10783);
   }
-  /* ./parser//parser.nit:10123 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10785 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10123);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10785);
   }
-  /* ./parser//parser.nit:10124 */
-  fra.me.REG[3] = NEW_AEqExpr_parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10128 */
+  /* parser/parser.nit:10786 */
+  fra.me.REG[3] = NEW_AEqExpr_parser___parser_prod___AEqExpr___init_aeqexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10790 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10129 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction319____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10791 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10129);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10791);
   }
-  REGB0 = ATTR_parser___ReduceAction319____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction319___init(val_t p0, val_t p1, int* init_table){
-  int itpos303 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction319].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos303]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10132;
-  fra.me.meth = LOCATE_parser___ReduceAction319___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10132 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction319____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos303] = 1;
-  return;
-}
-void parser___ReduceAction320___action(val_t p0, val_t p1){
+void parser___ReduceAction352___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10136;
-  fra.me.meth = LOCATE_parser___ReduceAction320___action;
+  fra.me.line = 10796;
+  fra.me.meth = LOCATE_parser___ReduceAction352___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33818,78 +30160,55 @@ void parser___ReduceAction320___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10138 */
+  /* parser/parser.nit:10798 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10139 */
+  /* parser/parser.nit:10799 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10140 */
+  /* parser/parser.nit:10800 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10141 */
+  /* parser/parser.nit:10801 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10142 */
+  /* parser/parser.nit:10802 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10144 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10804 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10144);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10804);
   }
-  /* ./parser//parser.nit:10146 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10806 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10146);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10806);
   }
-  /* ./parser//parser.nit:10147 */
-  fra.me.REG[3] = NEW_AEeExpr_parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10151 */
+  /* parser/parser.nit:10807 */
+  fra.me.REG[3] = NEW_AEeExpr_parser___parser_prod___AEeExpr___init_aeeexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10811 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10152 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction320____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10812 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10152);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10812);
   }
-  REGB0 = ATTR_parser___ReduceAction320____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction320___init(val_t p0, val_t p1, int* init_table){
-  int itpos304 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction320].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos304]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10155;
-  fra.me.meth = LOCATE_parser___ReduceAction320___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10155 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction320____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos304] = 1;
-  return;
-}
-void parser___ReduceAction321___action(val_t p0, val_t p1){
+void parser___ReduceAction353___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10159;
-  fra.me.meth = LOCATE_parser___ReduceAction321___action;
+  fra.me.line = 10817;
+  fra.me.meth = LOCATE_parser___ReduceAction353___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33897,78 +30216,55 @@ void parser___ReduceAction321___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10161 */
+  /* parser/parser.nit:10819 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10162 */
+  /* parser/parser.nit:10820 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10163 */
+  /* parser/parser.nit:10821 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10164 */
+  /* parser/parser.nit:10822 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10165 */
+  /* parser/parser.nit:10823 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10167 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10825 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10167);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10825);
   }
-  /* ./parser//parser.nit:10169 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10827 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10169);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10827);
   }
-  /* ./parser//parser.nit:10170 */
-  fra.me.REG[3] = NEW_ANeExpr_parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10174 */
+  /* parser/parser.nit:10828 */
+  fra.me.REG[3] = NEW_ANeExpr_parser___parser_prod___ANeExpr___init_aneexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10832 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10175 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction321____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10833 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10175);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10833);
   }
-  REGB0 = ATTR_parser___ReduceAction321____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction321___init(val_t p0, val_t p1, int* init_table){
-  int itpos305 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction321].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos305]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10178;
-  fra.me.meth = LOCATE_parser___ReduceAction321___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10178 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction321____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos305] = 1;
-  return;
-}
-void parser___ReduceAction322___action(val_t p0, val_t p1){
+void parser___ReduceAction354___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10182;
-  fra.me.meth = LOCATE_parser___ReduceAction322___action;
+  fra.me.line = 10838;
+  fra.me.meth = LOCATE_parser___ReduceAction354___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -33976,78 +30272,55 @@ void parser___ReduceAction322___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10184 */
+  /* parser/parser.nit:10840 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10185 */
+  /* parser/parser.nit:10841 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10186 */
+  /* parser/parser.nit:10842 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10187 */
+  /* parser/parser.nit:10843 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10188 */
+  /* parser/parser.nit:10844 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10190 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10846 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10190);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10846);
   }
-  /* ./parser//parser.nit:10192 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10848 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10192);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10848);
   }
-  /* ./parser//parser.nit:10193 */
-  fra.me.REG[3] = NEW_ALtExpr_parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10197 */
+  /* parser/parser.nit:10849 */
+  fra.me.REG[3] = NEW_ALtExpr_parser___parser_prod___ALtExpr___init_altexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10853 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10198 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction322____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10854 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10198);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10854);
   }
-  REGB0 = ATTR_parser___ReduceAction322____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction322___init(val_t p0, val_t p1, int* init_table){
-  int itpos306 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction322].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos306]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10201;
-  fra.me.meth = LOCATE_parser___ReduceAction322___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10201 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction322____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos306] = 1;
-  return;
-}
-void parser___ReduceAction323___action(val_t p0, val_t p1){
+void parser___ReduceAction355___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10205;
-  fra.me.meth = LOCATE_parser___ReduceAction323___action;
+  fra.me.line = 10859;
+  fra.me.meth = LOCATE_parser___ReduceAction355___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34055,78 +30328,55 @@ void parser___ReduceAction323___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10207 */
+  /* parser/parser.nit:10861 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10208 */
+  /* parser/parser.nit:10862 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10209 */
+  /* parser/parser.nit:10863 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10210 */
+  /* parser/parser.nit:10864 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10211 */
+  /* parser/parser.nit:10865 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10213 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10867 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10213);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10867);
   }
-  /* ./parser//parser.nit:10215 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10869 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10215);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10869);
   }
-  /* ./parser//parser.nit:10216 */
-  fra.me.REG[3] = NEW_ALeExpr_parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10220 */
+  /* parser/parser.nit:10870 */
+  fra.me.REG[3] = NEW_ALeExpr_parser___parser_prod___ALeExpr___init_aleexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10874 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10221 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction323____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10875 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10221);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10875);
   }
-  REGB0 = ATTR_parser___ReduceAction323____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction323___init(val_t p0, val_t p1, int* init_table){
-  int itpos307 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction323].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos307]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10224;
-  fra.me.meth = LOCATE_parser___ReduceAction323___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10224 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction323____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos307] = 1;
-  return;
-}
-void parser___ReduceAction324___action(val_t p0, val_t p1){
+void parser___ReduceAction356___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10228;
-  fra.me.meth = LOCATE_parser___ReduceAction324___action;
+  fra.me.line = 10880;
+  fra.me.meth = LOCATE_parser___ReduceAction356___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34134,78 +30384,55 @@ void parser___ReduceAction324___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10230 */
+  /* parser/parser.nit:10882 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10231 */
+  /* parser/parser.nit:10883 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10232 */
+  /* parser/parser.nit:10884 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10233 */
+  /* parser/parser.nit:10885 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10234 */
+  /* parser/parser.nit:10886 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10236 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10888 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10236);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10888);
   }
-  /* ./parser//parser.nit:10238 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10890 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10238);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10890);
   }
-  /* ./parser//parser.nit:10239 */
-  fra.me.REG[3] = NEW_ALlExpr_parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10243 */
+  /* parser/parser.nit:10891 */
+  fra.me.REG[3] = NEW_ALlExpr_parser___parser_prod___ALlExpr___init_allexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10895 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10244 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction324____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10896 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10244);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10896);
   }
-  REGB0 = ATTR_parser___ReduceAction324____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction324___init(val_t p0, val_t p1, int* init_table){
-  int itpos308 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction324].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos308]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10247;
-  fra.me.meth = LOCATE_parser___ReduceAction324___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10247 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction324____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos308] = 1;
-  return;
-}
-void parser___ReduceAction325___action(val_t p0, val_t p1){
+void parser___ReduceAction357___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10251;
-  fra.me.meth = LOCATE_parser___ReduceAction325___action;
+  fra.me.line = 10901;
+  fra.me.meth = LOCATE_parser___ReduceAction357___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34213,78 +30440,55 @@ void parser___ReduceAction325___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10253 */
+  /* parser/parser.nit:10903 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10254 */
+  /* parser/parser.nit:10904 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10255 */
+  /* parser/parser.nit:10905 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10256 */
+  /* parser/parser.nit:10906 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10257 */
+  /* parser/parser.nit:10907 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10259 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10909 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10259);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10909);
   }
-  /* ./parser//parser.nit:10261 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10911 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10261);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10911);
   }
-  /* ./parser//parser.nit:10262 */
-  fra.me.REG[3] = NEW_AGtExpr_parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10266 */
+  /* parser/parser.nit:10912 */
+  fra.me.REG[3] = NEW_AGtExpr_parser___parser_prod___AGtExpr___init_agtexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10916 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10267 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction325____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10917 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10267);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10917);
   }
-  REGB0 = ATTR_parser___ReduceAction325____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction325___init(val_t p0, val_t p1, int* init_table){
-  int itpos309 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction325].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos309]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10270;
-  fra.me.meth = LOCATE_parser___ReduceAction325___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10270 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction325____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos309] = 1;
-  return;
-}
-void parser___ReduceAction326___action(val_t p0, val_t p1){
+void parser___ReduceAction358___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10274;
-  fra.me.meth = LOCATE_parser___ReduceAction326___action;
+  fra.me.line = 10922;
+  fra.me.meth = LOCATE_parser___ReduceAction358___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34292,78 +30496,55 @@ void parser___ReduceAction326___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10276 */
+  /* parser/parser.nit:10924 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10277 */
+  /* parser/parser.nit:10925 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10278 */
+  /* parser/parser.nit:10926 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10279 */
+  /* parser/parser.nit:10927 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10280 */
+  /* parser/parser.nit:10928 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10282 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10930 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10282);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10930);
   }
-  /* ./parser//parser.nit:10284 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10932 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10284);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10932);
   }
-  /* ./parser//parser.nit:10285 */
-  fra.me.REG[3] = NEW_AGeExpr_parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10289 */
+  /* parser/parser.nit:10933 */
+  fra.me.REG[3] = NEW_AGeExpr_parser___parser_prod___AGeExpr___init_ageexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10937 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10290 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction326____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10938 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10290);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10938);
   }
-  REGB0 = ATTR_parser___ReduceAction326____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction326___init(val_t p0, val_t p1, int* init_table){
-  int itpos310 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction326].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos310]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10293;
-  fra.me.meth = LOCATE_parser___ReduceAction326___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10293 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction326____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos310] = 1;
-  return;
-}
-void parser___ReduceAction327___action(val_t p0, val_t p1){
+void parser___ReduceAction359___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10297;
-  fra.me.meth = LOCATE_parser___ReduceAction327___action;
+  fra.me.line = 10943;
+  fra.me.meth = LOCATE_parser___ReduceAction359___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34371,78 +30552,55 @@ void parser___ReduceAction327___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10299 */
+  /* parser/parser.nit:10945 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10300 */
+  /* parser/parser.nit:10946 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10301 */
+  /* parser/parser.nit:10947 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10302 */
+  /* parser/parser.nit:10948 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10303 */
+  /* parser/parser.nit:10949 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10305 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10951 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10305);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10951);
   }
-  /* ./parser//parser.nit:10307 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10953 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10307);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10953);
   }
-  /* ./parser//parser.nit:10308 */
-  fra.me.REG[3] = NEW_AGgExpr_parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10312 */
+  /* parser/parser.nit:10954 */
+  fra.me.REG[3] = NEW_AGgExpr_parser___parser_prod___AGgExpr___init_aggexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10958 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10313 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction327____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10959 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10313);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10959);
   }
-  REGB0 = ATTR_parser___ReduceAction327____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction327___init(val_t p0, val_t p1, int* init_table){
-  int itpos311 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction327].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos311]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10316;
-  fra.me.meth = LOCATE_parser___ReduceAction327___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10316 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction327____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos311] = 1;
-  return;
-}
-void parser___ReduceAction328___action(val_t p0, val_t p1){
+void parser___ReduceAction360___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10320;
-  fra.me.meth = LOCATE_parser___ReduceAction328___action;
+  fra.me.line = 10964;
+  fra.me.meth = LOCATE_parser___ReduceAction360___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34450,78 +30608,55 @@ void parser___ReduceAction328___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10322 */
+  /* parser/parser.nit:10966 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10323 */
+  /* parser/parser.nit:10967 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10324 */
+  /* parser/parser.nit:10968 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10325 */
+  /* parser/parser.nit:10969 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10326 */
+  /* parser/parser.nit:10970 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10328 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10972 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10328);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10972);
   }
-  /* ./parser//parser.nit:10330 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10974 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10974);
   }
-  /* ./parser//parser.nit:10331 */
-  fra.me.REG[3] = NEW_AStarshipExpr_parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10335 */
+  /* parser/parser.nit:10975 */
+  fra.me.REG[3] = NEW_AStarshipExpr_parser___parser_prod___AStarshipExpr___init_astarshipexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:10979 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10336 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction328____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:10980 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10336);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10980);
   }
-  REGB0 = ATTR_parser___ReduceAction328____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction328___init(val_t p0, val_t p1, int* init_table){
-  int itpos312 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction328].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos312]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10339;
-  fra.me.meth = LOCATE_parser___ReduceAction328___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10339 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction328____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos312] = 1;
-  return;
-}
-void parser___ReduceAction329___action(val_t p0, val_t p1){
+void parser___ReduceAction361___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10343;
-  fra.me.meth = LOCATE_parser___ReduceAction329___action;
+  fra.me.line = 10985;
+  fra.me.meth = LOCATE_parser___ReduceAction361___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34529,78 +30664,55 @@ void parser___ReduceAction329___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10345 */
+  /* parser/parser.nit:10987 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10346 */
+  /* parser/parser.nit:10988 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10347 */
+  /* parser/parser.nit:10989 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10348 */
+  /* parser/parser.nit:10990 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10349 */
+  /* parser/parser.nit:10991 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10351 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:10993 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10351);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10993);
   }
-  /* ./parser//parser.nit:10353 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:10995 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10353);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 10995);
   }
-  /* ./parser//parser.nit:10354 */
-  fra.me.REG[3] = NEW_AIsaExpr_parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10358 */
+  /* parser/parser.nit:10996 */
+  fra.me.REG[3] = NEW_AIsaExpr_parser___parser_prod___AIsaExpr___init_aisaexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11000 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10359 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction329____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11001 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10359);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11001);
   }
-  REGB0 = ATTR_parser___ReduceAction329____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction329___init(val_t p0, val_t p1, int* init_table){
-  int itpos313 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction329].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos313]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10362;
-  fra.me.meth = LOCATE_parser___ReduceAction329___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10362 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction329____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos313] = 1;
-  return;
-}
-void parser___ReduceAction331___action(val_t p0, val_t p1){
+void parser___ReduceAction363___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10366;
-  fra.me.meth = LOCATE_parser___ReduceAction331___action;
+  fra.me.line = 11006;
+  fra.me.meth = LOCATE_parser___ReduceAction363___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34608,78 +30720,55 @@ void parser___ReduceAction331___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10368 */
+  /* parser/parser.nit:11008 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10369 */
+  /* parser/parser.nit:11009 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10370 */
+  /* parser/parser.nit:11010 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10371 */
+  /* parser/parser.nit:11011 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10372 */
+  /* parser/parser.nit:11012 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10374 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11014 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10374);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11014);
   }
-  /* ./parser//parser.nit:10376 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11016 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10376);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11016);
   }
-  /* ./parser//parser.nit:10377 */
-  fra.me.REG[3] = NEW_APlusExpr_parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10381 */
+  /* parser/parser.nit:11017 */
+  fra.me.REG[3] = NEW_APlusExpr_parser___parser_prod___APlusExpr___init_aplusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11021 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10382 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction331____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11022 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10382);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11022);
   }
-  REGB0 = ATTR_parser___ReduceAction331____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction331___init(val_t p0, val_t p1, int* init_table){
-  int itpos314 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction331].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos314]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10385;
-  fra.me.meth = LOCATE_parser___ReduceAction331___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10385 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction331____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos314] = 1;
-  return;
-}
-void parser___ReduceAction332___action(val_t p0, val_t p1){
+void parser___ReduceAction364___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10389;
-  fra.me.meth = LOCATE_parser___ReduceAction332___action;
+  fra.me.line = 11027;
+  fra.me.meth = LOCATE_parser___ReduceAction364___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34687,78 +30776,55 @@ void parser___ReduceAction332___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10391 */
+  /* parser/parser.nit:11029 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10392 */
+  /* parser/parser.nit:11030 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10393 */
+  /* parser/parser.nit:11031 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10394 */
+  /* parser/parser.nit:11032 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10395 */
+  /* parser/parser.nit:11033 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10397 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11035 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10397);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11035);
   }
-  /* ./parser//parser.nit:10399 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11037 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10399);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11037);
   }
-  /* ./parser//parser.nit:10400 */
-  fra.me.REG[3] = NEW_AMinusExpr_parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10404 */
+  /* parser/parser.nit:11038 */
+  fra.me.REG[3] = NEW_AMinusExpr_parser___parser_prod___AMinusExpr___init_aminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11042 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10405 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction332____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11043 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10405);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11043);
   }
-  REGB0 = ATTR_parser___ReduceAction332____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction332___init(val_t p0, val_t p1, int* init_table){
-  int itpos315 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction332].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos315]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10408;
-  fra.me.meth = LOCATE_parser___ReduceAction332___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10408 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction332____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos315] = 1;
-  return;
-}
-void parser___ReduceAction334___action(val_t p0, val_t p1){
+void parser___ReduceAction366___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10412;
-  fra.me.meth = LOCATE_parser___ReduceAction334___action;
+  fra.me.line = 11048;
+  fra.me.meth = LOCATE_parser___ReduceAction366___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34766,78 +30832,55 @@ void parser___ReduceAction334___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10414 */
+  /* parser/parser.nit:11050 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10415 */
+  /* parser/parser.nit:11051 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10416 */
+  /* parser/parser.nit:11052 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10417 */
+  /* parser/parser.nit:11053 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10418 */
+  /* parser/parser.nit:11054 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10420 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11056 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10420);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11056);
   }
-  /* ./parser//parser.nit:10422 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11058 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10422);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11058);
   }
-  /* ./parser//parser.nit:10423 */
-  fra.me.REG[3] = NEW_AStarExpr_parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10427 */
+  /* parser/parser.nit:11059 */
+  fra.me.REG[3] = NEW_AStarExpr_parser___parser_prod___AStarExpr___init_astarexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11063 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10428 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction334____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11064 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11064);
   }
-  REGB0 = ATTR_parser___ReduceAction334____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction334___init(val_t p0, val_t p1, int* init_table){
-  int itpos316 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction334].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos316]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10431;
-  fra.me.meth = LOCATE_parser___ReduceAction334___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10431 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction334____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos316] = 1;
-  return;
-}
-void parser___ReduceAction335___action(val_t p0, val_t p1){
+void parser___ReduceAction367___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10435;
-  fra.me.meth = LOCATE_parser___ReduceAction335___action;
+  fra.me.line = 11069;
+  fra.me.meth = LOCATE_parser___ReduceAction367___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34845,78 +30888,55 @@ void parser___ReduceAction335___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10437 */
+  /* parser/parser.nit:11071 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10438 */
+  /* parser/parser.nit:11072 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10439 */
+  /* parser/parser.nit:11073 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10440 */
+  /* parser/parser.nit:11074 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10441 */
+  /* parser/parser.nit:11075 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10443 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11077 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10443);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11077);
   }
-  /* ./parser//parser.nit:10445 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11079 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10445);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11079);
   }
-  /* ./parser//parser.nit:10446 */
-  fra.me.REG[3] = NEW_ASlashExpr_parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10450 */
+  /* parser/parser.nit:11080 */
+  fra.me.REG[3] = NEW_ASlashExpr_parser___parser_prod___ASlashExpr___init_aslashexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11084 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10451 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction335____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11085 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10451);
-  }
-  REGB0 = ATTR_parser___ReduceAction335____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction335___init(val_t p0, val_t p1, int* init_table){
-  int itpos317 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction335].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos317]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10454;
-  fra.me.meth = LOCATE_parser___ReduceAction335___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10454 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction335____goto(fra.me.REG[1]) = REGB0;
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11085);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos317] = 1;
   return;
 }
-void parser___ReduceAction336___action(val_t p0, val_t p1){
+void parser___ReduceAction368___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10458;
-  fra.me.meth = LOCATE_parser___ReduceAction336___action;
+  fra.me.line = 11090;
+  fra.me.meth = LOCATE_parser___ReduceAction368___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -34924,78 +30944,55 @@ void parser___ReduceAction336___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10460 */
+  /* parser/parser.nit:11092 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10461 */
+  /* parser/parser.nit:11093 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10462 */
+  /* parser/parser.nit:11094 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10463 */
+  /* parser/parser.nit:11095 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10464 */
+  /* parser/parser.nit:11096 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10466 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11098 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10466);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11098);
   }
-  /* ./parser//parser.nit:10468 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11100 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10468);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11100);
   }
-  /* ./parser//parser.nit:10469 */
-  fra.me.REG[3] = NEW_APercentExpr_parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10473 */
+  /* parser/parser.nit:11101 */
+  fra.me.REG[3] = NEW_APercentExpr_parser___parser_prod___APercentExpr___init_apercentexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11105 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10474 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction336____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11106 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10474);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11106);
   }
-  REGB0 = ATTR_parser___ReduceAction336____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction336___init(val_t p0, val_t p1, int* init_table){
-  int itpos318 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction336].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos318]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10477;
-  fra.me.meth = LOCATE_parser___ReduceAction336___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10477 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction336____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos318] = 1;
-  return;
-}
-void parser___ReduceAction338___action(val_t p0, val_t p1){
+void parser___ReduceAction370___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10481;
-  fra.me.meth = LOCATE_parser___ReduceAction338___action;
+  fra.me.line = 11111;
+  fra.me.meth = LOCATE_parser___ReduceAction370___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35003,76 +31000,53 @@ void parser___ReduceAction338___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10483 */
+  /* parser/parser.nit:11113 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10484 */
+  /* parser/parser.nit:11114 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10485 */
+  /* parser/parser.nit:11115 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10486 */
+  /* parser/parser.nit:11116 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10488 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TMinus, ID_TMinus)) /*cast nullable TMinus*/;
+  /* parser/parser.nit:11118 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TMinus, ID_parser___parser_nodes___TMinus)) /*cast nullable TMinus*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10488);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11118);
   }
-  /* ./parser//parser.nit:10490 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11120 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10490);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11120);
   }
-  /* ./parser//parser.nit:10491 */
-  fra.me.REG[3] = NEW_AUminusExpr_parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10495 */
+  /* parser/parser.nit:11121 */
+  fra.me.REG[3] = NEW_AUminusExpr_parser___parser_prod___AUminusExpr___init_auminusexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11125 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10496 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction338____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11126 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10496);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11126);
   }
-  REGB0 = ATTR_parser___ReduceAction338____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction338___init(val_t p0, val_t p1, int* init_table){
-  int itpos319 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction338].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos319]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10499;
-  fra.me.meth = LOCATE_parser___ReduceAction338___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10499 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction338____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos319] = 1;
-  return;
-}
-void parser___ReduceAction339___action(val_t p0, val_t p1){
+void parser___ReduceAction371___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10503;
-  fra.me.meth = LOCATE_parser___ReduceAction339___action;
+  fra.me.line = 11131;
+  fra.me.meth = LOCATE_parser___ReduceAction371___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35080,168 +31054,116 @@ void parser___ReduceAction339___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10505 */
+  /* parser/parser.nit:11133 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10506 */
+  /* parser/parser.nit:11134 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10507 */
+  /* parser/parser.nit:11135 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10508 */
+  /* parser/parser.nit:11136 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10510 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwonce, ID_TKwonce)) /*cast nullable TKwonce*/;
+  /* parser/parser.nit:11138 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwonce, ID_parser___parser_nodes___TKwonce)) /*cast nullable TKwonce*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10510);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11138);
   }
-  /* ./parser//parser.nit:10512 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11140 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10512);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11140);
   }
-  /* ./parser//parser.nit:10513 */
-  fra.me.REG[3] = NEW_AOnceExpr_parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10517 */
+  /* parser/parser.nit:11141 */
+  fra.me.REG[3] = NEW_AOnceExpr_parser___parser_prod___AOnceExpr___init_aonceexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11145 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10518 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction339____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11146 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10518);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11146);
   }
-  REGB0 = ATTR_parser___ReduceAction339____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction339___init(val_t p0, val_t p1, int* init_table){
-  int itpos320 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction339].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos320]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10521;
-  fra.me.meth = LOCATE_parser___ReduceAction339___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10521 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction339____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos320] = 1;
-  return;
-}
-void parser___ReduceAction341___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction373___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10525;
-  fra.me.meth = LOCATE_parser___ReduceAction341___action;
+  fra.me.line = 11151;
+  fra.me.meth = LOCATE_parser___ReduceAction373___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10527 */
+  /* parser/parser.nit:11153 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10528 */
+  /* parser/parser.nit:11154 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10529 */
+  /* parser/parser.nit:11155 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10530 */
+  /* parser/parser.nit:11156 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10531 */
+  /* parser/parser.nit:11157 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10532 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10534 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
+  /* parser/parser.nit:11159 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10534);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11159);
   }
-  /* ./parser//parser.nit:10536 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:11161 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10536);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11161);
   }
-  /* ./parser//parser.nit:10538 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11163 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10538);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11163);
   }
-  /* ./parser//parser.nit:10539 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:10540 */
-  fra.me.REG[6] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[6]);
-  /* ./parser//parser.nit:10546 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10547 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction341____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11164 */
+  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[5], fra.me.REG[4], NIT_NULL, fra.me.REG[3]);
+  /* parser/parser.nit:11170 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11171 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10547);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11171);
   }
-  REGB0 = ATTR_parser___ReduceAction341____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction341___init(val_t p0, val_t p1, int* init_table){
-  int itpos321 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction341].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos321]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10550;
-  fra.me.meth = LOCATE_parser___ReduceAction341___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10550 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction341____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos321] = 1;
-  return;
-}
-void parser___ReduceAction342___action(val_t p0, val_t p1){
+void parser___ReduceAction374___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10554;
-  fra.me.meth = LOCATE_parser___ReduceAction342___action;
+  fra.me.line = 11176;
+  fra.me.meth = LOCATE_parser___ReduceAction374___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35250,86 +31172,63 @@ void parser___ReduceAction342___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10556 */
+  /* parser/parser.nit:11178 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10557 */
+  /* parser/parser.nit:11179 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10558 */
+  /* parser/parser.nit:11180 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10559 */
+  /* parser/parser.nit:11181 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10560 */
+  /* parser/parser.nit:11182 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10561 */
+  /* parser/parser.nit:11183 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10563 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  /* parser/parser.nit:11185 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10563);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11185);
   }
-  /* ./parser//parser.nit:10565 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11187 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10565);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11187);
   }
-  /* ./parser//parser.nit:10567 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:11189 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10567);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11189);
   }
-  /* ./parser//parser.nit:10568 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10573 */
+  /* parser/parser.nit:11190 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11195 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10574 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction342____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11196 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10574);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11196);
   }
-  REGB0 = ATTR_parser___ReduceAction342____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction342___init(val_t p0, val_t p1, int* init_table){
-  int itpos322 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction342].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos322]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10577;
-  fra.me.meth = LOCATE_parser___ReduceAction342___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10577 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction342____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos322] = 1;
-  return;
-}
-void parser___ReduceAction343___action(val_t p0, val_t p1){
+void parser___ReduceAction375___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10581;
-  fra.me.meth = LOCATE_parser___ReduceAction343___action;
+  fra.me.line = 11201;
+  fra.me.meth = LOCATE_parser___ReduceAction375___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35338,76 +31237,53 @@ void parser___ReduceAction343___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10583 */
+  /* parser/parser.nit:11203 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10584 */
+  /* parser/parser.nit:11204 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10585 */
+  /* parser/parser.nit:11205 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10587 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  /* parser/parser.nit:11207 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10587);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11207);
   }
-  /* ./parser//parser.nit:10588 */
-  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10591 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:11208 */
+  fra.me.REG[5] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:11210 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10591);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11210);
   }
-  /* ./parser//parser.nit:10592 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:10597 */
+  /* parser/parser.nit:11211 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:11216 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10598 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction343____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11217 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10598);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11217);
   }
-  REGB0 = ATTR_parser___ReduceAction343____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction343___init(val_t p0, val_t p1, int* init_table){
-  int itpos323 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction343].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos323]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10601;
-  fra.me.meth = LOCATE_parser___ReduceAction343___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10601 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction343____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos323] = 1;
-  return;
-}
-void parser___ReduceAction344___action(val_t p0, val_t p1){
+void parser___ReduceAction376___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10605;
-  fra.me.meth = LOCATE_parser___ReduceAction344___action;
+  fra.me.line = 11222;
+  fra.me.meth = LOCATE_parser___ReduceAction376___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35415,78 +31291,55 @@ void parser___ReduceAction344___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10607 */
+  /* parser/parser.nit:11224 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10608 */
+  /* parser/parser.nit:11225 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10609 */
+  /* parser/parser.nit:11226 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10610 */
+  /* parser/parser.nit:11227 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10611 */
+  /* parser/parser.nit:11228 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10613 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11230 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10613);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11230);
   }
-  /* ./parser//parser.nit:10615 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:11232 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10615);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11232);
   }
-  /* ./parser//parser.nit:10616 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10620 */
+  /* parser/parser.nit:11233 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11237 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10621 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction344____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11238 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10621);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11238);
   }
-  REGB0 = ATTR_parser___ReduceAction344____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction344___init(val_t p0, val_t p1, int* init_table){
-  int itpos324 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction344].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos324]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10624;
-  fra.me.meth = LOCATE_parser___ReduceAction344___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10624 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction344____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos324] = 1;
-  return;
-}
-void parser___ReduceAction345___action(val_t p0, val_t p1){
+void parser___ReduceAction377___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10628;
-  fra.me.meth = LOCATE_parser___ReduceAction345___action;
+  fra.me.line = 11243;
+  fra.me.meth = LOCATE_parser___ReduceAction377___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35494,152 +31347,100 @@ void parser___ReduceAction345___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10630 */
+  /* parser/parser.nit:11245 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10631 */
+  /* parser/parser.nit:11246 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10632 */
-  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:10635 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:11247 */
+  fra.me.REG[4] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:11249 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10635);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11249);
   }
-  /* ./parser//parser.nit:10636 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10640 */
+  /* parser/parser.nit:11250 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11254 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10641 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction345____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11255 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10641);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11255);
   }
-  REGB0 = ATTR_parser___ReduceAction345____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction345___init(val_t p0, val_t p1, int* init_table){
-  int itpos325 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction345].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos325]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10644;
-  fra.me.meth = LOCATE_parser___ReduceAction345___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10644 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction345____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos325] = 1;
-  return;
-}
-void parser___ReduceAction352___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction384___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10648;
-  fra.me.meth = LOCATE_parser___ReduceAction352___action;
+  fra.me.line = 11260;
+  fra.me.meth = LOCATE_parser___ReduceAction384___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10650 */
+  /* parser/parser.nit:11262 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10651 */
+  /* parser/parser.nit:11263 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10652 */
+  /* parser/parser.nit:11264 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10653 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10654 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10656 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11265 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11267 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10656);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11267);
   }
-  /* ./parser//parser.nit:10658 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11269 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10658);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11269);
   }
-  /* ./parser//parser.nit:10659 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:10660 */
-  fra.me.REG[6] = NEW_ABraExpr_parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[5], fra.me.REG[6]);
-  /* ./parser//parser.nit:10665 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:10666 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction352____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11270 */
+  fra.me.REG[5] = NEW_ABraExpr_parser___parser_prod___ABraExpr___init_abraexpr(fra.me.REG[4], fra.me.REG[3], fra.me.REG[5]);
+  /* parser/parser.nit:11275 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:11276 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10666);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11276);
   }
-  REGB0 = ATTR_parser___ReduceAction352____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction352___init(val_t p0, val_t p1, int* init_table){
-  int itpos326 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction352].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos326]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10669;
-  fra.me.meth = LOCATE_parser___ReduceAction352___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10669 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction352____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos326] = 1;
-  return;
-}
-void parser___ReduceAction353___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction385___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10673;
-  fra.me.meth = LOCATE_parser___ReduceAction353___action;
+  fra.me.line = 11281;
+  fra.me.meth = LOCATE_parser___ReduceAction385___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -35647,982 +31448,772 @@ void parser___ReduceAction353___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10675 */
+  /* parser/parser.nit:11283 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10676 */
+  /* parser/parser.nit:11284 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10677 */
+  /* parser/parser.nit:11285 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10678 */
+  /* parser/parser.nit:11286 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10679 */
+  /* parser/parser.nit:11287 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10680 */
+  /* parser/parser.nit:11288 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10681 */
+  /* parser/parser.nit:11289 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10682 */
+  /* parser/parser.nit:11290 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10683 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10685 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_TKwnew, ID_TKwnew)) /*cast nullable TKwnew*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10685);
-  }
-  /* ./parser//parser.nit:10687 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AType, ID_AType)) /*cast nullable AType*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10687);
-  }
-  /* ./parser//parser.nit:10689 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10689);
-  }
-  /* ./parser//parser.nit:10691 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11292 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwnew, ID_parser___parser_nodes___TKwnew)) /*cast nullable TKwnew*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10691);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11292);
   }
-  /* ./parser//parser.nit:10692 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[7], fra.me.REG[3]);
-  fra.me.REG[7] = fra.me.REG[3];
-  /* ./parser//parser.nit:10693 */
-  fra.me.REG[7] = NEW_ANewExpr_parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[7]);
-  /* ./parser//parser.nit:10699 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:10700 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction353____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11294 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10700);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11294);
   }
-  REGB0 = ATTR_parser___ReduceAction353____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction353___init(val_t p0, val_t p1, int* init_table){
-  int itpos327 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction353].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos327]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10703;
-  fra.me.meth = LOCATE_parser___ReduceAction353___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10703 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction353____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos327] = 1;
-  return;
-}
-void parser___ReduceAction354___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
-  val_t REGB0;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10707;
-  fra.me.meth = LOCATE_parser___ReduceAction354___action;
-  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;
-  /* ./parser//parser.nit:10709 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10710 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10711 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10712 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10713 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10714 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10715 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10716 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10717 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10718 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10720 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11296 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10720);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11296);
   }
-  /* ./parser//parser.nit:10722 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11298 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10722);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11298);
   }
-  /* ./parser//parser.nit:10723 */
-  fra.me.REG[3] = NEW_ACrangeExpr_parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10727 */
+  /* parser/parser.nit:11299 */
+  fra.me.REG[3] = NEW_ANewExpr_parser___parser_prod___ANewExpr___init_anewexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11305 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10728 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction354____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11306 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10728);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11306);
   }
-  REGB0 = ATTR_parser___ReduceAction354____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction354___init(val_t p0, val_t p1, int* init_table){
-  int itpos328 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction354].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos328]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10731;
-  fra.me.meth = LOCATE_parser___ReduceAction354___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10731 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction354____goto(fra.me.REG[1]) = REGB0;
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos328] = 1;
   return;
 }
-void parser___ReduceAction355___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction386___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10735;
-  fra.me.meth = LOCATE_parser___ReduceAction355___action;
+  fra.me.line = 11311;
+  fra.me.meth = LOCATE_parser___ReduceAction386___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10737 */
+  /* parser/parser.nit:11313 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10738 */
+  /* parser/parser.nit:11314 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10739 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10740 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10741 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10742 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10743 */
+  /* parser/parser.nit:11315 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10744 */
+  /* parser/parser.nit:11316 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10745 */
+  /* parser/parser.nit:11317 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10746 */
+  /* parser/parser.nit:11318 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10748 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11319 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11320 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11321 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11322 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11324 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10748);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11324);
   }
-  /* ./parser//parser.nit:10750 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11326 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10750);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11326);
   }
-  /* ./parser//parser.nit:10751 */
-  fra.me.REG[3] = NEW_AOrangeExpr_parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10755 */
+  /* parser/parser.nit:11328 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11328);
+  }
+  /* parser/parser.nit:11330 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11330);
+  }
+  /* parser/parser.nit:11331 */
+  fra.me.REG[3] = NEW_ACrangeExpr_parser___parser_prod___ACrangeExpr___init_acrangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11337 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10756 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction355____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11338 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10756);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11338);
   }
-  REGB0 = ATTR_parser___ReduceAction355____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction355___init(val_t p0, val_t p1, int* init_table){
-  int itpos329 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction355].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos329]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10759;
-  fra.me.meth = LOCATE_parser___ReduceAction355___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10759 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction355____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos329] = 1;
-  return;
-}
-void parser___ReduceAction356___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction387___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10763;
-  fra.me.meth = LOCATE_parser___ReduceAction356___action;
+  fra.me.line = 11343;
+  fra.me.meth = LOCATE_parser___ReduceAction387___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10765 */
+  /* parser/parser.nit:11345 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10766 */
+  /* parser/parser.nit:11346 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10767 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10769 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11347 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11348 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11349 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11350 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11351 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11352 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11353 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11354 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11356 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10769);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11356);
   }
-  /* ./parser//parser.nit:10770 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:10771 */
-  fra.me.REG[4] = NEW_AArrayExpr_parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[4]);
-  /* ./parser//parser.nit:10774 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:10775 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction356____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11358 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11358);
+  }
+  /* parser/parser.nit:11360 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11360);
+  }
+  /* parser/parser.nit:11362 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10775);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11362);
   }
-  REGB0 = ATTR_parser___ReduceAction356____goto(fra.me.REG[0]);
+  /* parser/parser.nit:11363 */
+  fra.me.REG[3] = NEW_AOrangeExpr_parser___parser_prod___AOrangeExpr___init_aorangeexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11369 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11370 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11370);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction356___init(val_t p0, val_t p1, int* init_table){
-  int itpos330 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction356].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos330]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10778;
-  fra.me.meth = LOCATE_parser___ReduceAction356___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10778 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction356____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos330] = 1;
-  return;
-}
-void parser___ReduceAction357___action(val_t p0, val_t p1){
+void parser___ReduceAction388___action(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;
-  fra.me.line = 10782;
-  fra.me.meth = LOCATE_parser___ReduceAction357___action;
+  fra.me.line = 11375;
+  fra.me.meth = LOCATE_parser___ReduceAction388___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10784 */
+  /* parser/parser.nit:11377 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10785 */
+  /* parser/parser.nit:11378 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10787 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwself, ID_TKwself)) /*cast nullable TKwself*/;
+  /* parser/parser.nit:11380 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10787);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11380);
   }
-  /* ./parser//parser.nit:10788 */
-  fra.me.REG[3] = NEW_ASelfExpr_parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10791 */
+  /* parser/parser.nit:11381 */
+  fra.me.REG[3] = NEW_AArrayExpr_parser___parser_prod___AArrayExpr___init_aarrayexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11384 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10792 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction357____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11385 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10792);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11385);
   }
-  REGB0 = ATTR_parser___ReduceAction357____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction357___init(val_t p0, val_t p1, int* init_table){
-  int itpos331 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction357].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos331]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10795;
-  fra.me.meth = LOCATE_parser___ReduceAction357___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10795 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction357____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos331] = 1;
-  return;
-}
-void parser___ReduceAction358___action(val_t p0, val_t p1){
+void parser___ReduceAction389___action(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;
-  fra.me.line = 10799;
-  fra.me.meth = LOCATE_parser___ReduceAction358___action;
+  fra.me.line = 11390;
+  fra.me.meth = LOCATE_parser___ReduceAction389___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10801 */
+  /* parser/parser.nit:11392 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10802 */
+  /* parser/parser.nit:11393 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10804 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwtrue, ID_TKwtrue)) /*cast nullable TKwtrue*/;
+  /* parser/parser.nit:11395 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwself, ID_parser___parser_nodes___TKwself)) /*cast nullable TKwself*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10804);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11395);
   }
-  /* ./parser//parser.nit:10805 */
-  fra.me.REG[3] = NEW_ATrueExpr_parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10808 */
+  /* parser/parser.nit:11396 */
+  fra.me.REG[3] = NEW_ASelfExpr_parser___parser_prod___ASelfExpr___init_aselfexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11399 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10809 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction358____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11400 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10809);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11400);
   }
-  REGB0 = ATTR_parser___ReduceAction358____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction358___init(val_t p0, val_t p1, int* init_table){
-  int itpos332 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction358].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos332]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10812;
-  fra.me.meth = LOCATE_parser___ReduceAction358___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10812 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction358____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos332] = 1;
-  return;
-}
-void parser___ReduceAction359___action(val_t p0, val_t p1){
+void parser___ReduceAction390___action(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;
-  fra.me.line = 10816;
-  fra.me.meth = LOCATE_parser___ReduceAction359___action;
+  fra.me.line = 11405;
+  fra.me.meth = LOCATE_parser___ReduceAction390___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10818 */
+  /* parser/parser.nit:11407 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10819 */
+  /* parser/parser.nit:11408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10821 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwfalse, ID_TKwfalse)) /*cast nullable TKwfalse*/;
+  /* parser/parser.nit:11410 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwtrue, ID_parser___parser_nodes___TKwtrue)) /*cast nullable TKwtrue*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10821);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11410);
   }
-  /* ./parser//parser.nit:10822 */
-  fra.me.REG[3] = NEW_AFalseExpr_parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10825 */
+  /* parser/parser.nit:11411 */
+  fra.me.REG[3] = NEW_ATrueExpr_parser___parser_prod___ATrueExpr___init_atrueexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11414 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10826 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction359____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11415 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10826);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11415);
   }
-  REGB0 = ATTR_parser___ReduceAction359____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction359___init(val_t p0, val_t p1, int* init_table){
-  int itpos333 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction359].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos333]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10829;
-  fra.me.meth = LOCATE_parser___ReduceAction359___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10829 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction359____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos333] = 1;
-  return;
-}
-void parser___ReduceAction360___action(val_t p0, val_t p1){
+void parser___ReduceAction391___action(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;
-  fra.me.line = 10833;
-  fra.me.meth = LOCATE_parser___ReduceAction360___action;
+  fra.me.line = 11420;
+  fra.me.meth = LOCATE_parser___ReduceAction391___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10835 */
+  /* parser/parser.nit:11422 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10836 */
+  /* parser/parser.nit:11423 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10838 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  /* parser/parser.nit:11425 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwfalse, ID_parser___parser_nodes___TKwfalse)) /*cast nullable TKwfalse*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10838);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11425);
   }
-  /* ./parser//parser.nit:10839 */
-  fra.me.REG[3] = NEW_ANullExpr_parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10842 */
+  /* parser/parser.nit:11426 */
+  fra.me.REG[3] = NEW_AFalseExpr_parser___parser_prod___AFalseExpr___init_afalseexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11429 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10843 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction360____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11430 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10843);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11430);
   }
-  REGB0 = ATTR_parser___ReduceAction360____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction360___init(val_t p0, val_t p1, int* init_table){
-  int itpos334 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction360].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos334]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10846;
-  fra.me.meth = LOCATE_parser___ReduceAction360___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10846 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction360____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos334] = 1;
-  return;
-}
-void parser___ReduceAction361___action(val_t p0, val_t p1){
+void parser___ReduceAction392___action(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;
-  fra.me.line = 10850;
-  fra.me.meth = LOCATE_parser___ReduceAction361___action;
+  fra.me.line = 11435;
+  fra.me.meth = LOCATE_parser___ReduceAction392___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10852 */
+  /* parser/parser.nit:11437 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10853 */
+  /* parser/parser.nit:11438 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10855 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TNumber, ID_TNumber)) /*cast nullable TNumber*/;
+  /* parser/parser.nit:11440 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11440);
   }
-  /* ./parser//parser.nit:10856 */
-  fra.me.REG[3] = NEW_AIntExpr_parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10859 */
+  /* parser/parser.nit:11441 */
+  fra.me.REG[3] = NEW_ANullExpr_parser___parser_prod___ANullExpr___init_anullexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11444 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10860 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction361____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11445 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10860);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11445);
   }
-  REGB0 = ATTR_parser___ReduceAction361____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction361___init(val_t p0, val_t p1, int* init_table){
-  int itpos335 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction361].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos335]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10863;
-  fra.me.meth = LOCATE_parser___ReduceAction361___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10863 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction361____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos335] = 1;
-  return;
-}
-void parser___ReduceAction362___action(val_t p0, val_t p1){
+void parser___ReduceAction393___action(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;
-  fra.me.line = 10867;
-  fra.me.meth = LOCATE_parser___ReduceAction362___action;
+  fra.me.line = 11450;
+  fra.me.meth = LOCATE_parser___ReduceAction393___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10869 */
+  /* parser/parser.nit:11452 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10870 */
+  /* parser/parser.nit:11453 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10872 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TFloat, ID_TFloat)) /*cast nullable TFloat*/;
+  /* parser/parser.nit:11455 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TNumber, ID_parser___parser_nodes___TNumber)) /*cast nullable TNumber*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10872);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11455);
   }
-  /* ./parser//parser.nit:10873 */
-  fra.me.REG[3] = NEW_AFloatExpr_parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10876 */
+  /* parser/parser.nit:11456 */
+  fra.me.REG[3] = NEW_AIntExpr_parser___parser_prod___AIntExpr___init_aintexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11459 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10877 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction362____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11460 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10877);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11460);
   }
-  REGB0 = ATTR_parser___ReduceAction362____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction362___init(val_t p0, val_t p1, int* init_table){
-  int itpos336 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction362].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos336]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10880;
-  fra.me.meth = LOCATE_parser___ReduceAction362___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10880 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction362____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos336] = 1;
-  return;
-}
-void parser___ReduceAction363___action(val_t p0, val_t p1){
+void parser___ReduceAction394___action(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;
-  fra.me.line = 10884;
-  fra.me.meth = LOCATE_parser___ReduceAction363___action;
+  fra.me.line = 11465;
+  fra.me.meth = LOCATE_parser___ReduceAction394___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10886 */
+  /* parser/parser.nit:11467 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10887 */
+  /* parser/parser.nit:11468 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10889 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TChar, ID_TChar)) /*cast nullable TChar*/;
+  /* parser/parser.nit:11470 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TFloat, ID_parser___parser_nodes___TFloat)) /*cast nullable TFloat*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10889);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11470);
   }
-  /* ./parser//parser.nit:10890 */
-  fra.me.REG[3] = NEW_ACharExpr_parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10893 */
+  /* parser/parser.nit:11471 */
+  fra.me.REG[3] = NEW_AFloatExpr_parser___parser_prod___AFloatExpr___init_afloatexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11474 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10894 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction363____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11475 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10894);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11475);
   }
-  REGB0 = ATTR_parser___ReduceAction363____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction363___init(val_t p0, val_t p1, int* init_table){
-  int itpos337 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction363].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction395___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos337]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10897;
-  fra.me.meth = LOCATE_parser___ReduceAction363___init;
+  fra.me.line = 11480;
+  fra.me.meth = LOCATE_parser___ReduceAction395___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10897 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction363____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11482 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11483 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11485 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TChar, ID_parser___parser_nodes___TChar)) /*cast nullable TChar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11485);
+  }
+  /* parser/parser.nit:11486 */
+  fra.me.REG[3] = NEW_ACharExpr_parser___parser_prod___ACharExpr___init_acharexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11489 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11490 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11490);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos337] = 1;
   return;
 }
-void parser___ReduceAction364___action(val_t p0, val_t p1){
+void parser___ReduceAction396___action(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;
-  fra.me.line = 10901;
-  fra.me.meth = LOCATE_parser___ReduceAction364___action;
+  fra.me.line = 11495;
+  fra.me.meth = LOCATE_parser___ReduceAction396___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10903 */
+  /* parser/parser.nit:11497 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10904 */
+  /* parser/parser.nit:11498 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10906 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TString, ID_TString)) /*cast nullable TString*/;
+  /* parser/parser.nit:11500 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TString, ID_parser___parser_nodes___TString)) /*cast nullable TString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10906);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11500);
   }
-  /* ./parser//parser.nit:10907 */
-  fra.me.REG[3] = NEW_AStringExpr_parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:10910 */
+  /* parser/parser.nit:11501 */
+  fra.me.REG[3] = NEW_AStringExpr_parser___parser_prod___AStringExpr___init_astringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11504 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10911 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction364____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11505 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10911);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11505);
   }
-  REGB0 = ATTR_parser___ReduceAction364____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction364___init(val_t p0, val_t p1, int* init_table){
-  int itpos338 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction364].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction398___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos338]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10914;
-  fra.me.meth = LOCATE_parser___ReduceAction364___init;
+  fra.me.line = 11510;
+  fra.me.meth = LOCATE_parser___ReduceAction398___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10914 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction364____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11512 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11513 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11514 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11515 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11517 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11517);
+  }
+  /* parser/parser.nit:11519 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11519);
+  }
+  /* parser/parser.nit:11521 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11521);
+  }
+  /* parser/parser.nit:11522 */
+  fra.me.REG[3] = NEW_AParExpr_parser___parser_prod___AParExpr___init_aparexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11527 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11528 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11528);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos338] = 1;
   return;
 }
-void parser___ReduceAction367___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction399___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10918;
-  fra.me.meth = LOCATE_parser___ReduceAction367___action;
+  fra.me.line = 11533;
+  fra.me.meth = LOCATE_parser___ReduceAction399___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 8;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10920 */
+  /* parser/parser.nit:11535 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10921 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10922 */
+  /* parser/parser.nit:11536 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10923 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10924 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10925 */
+  /* parser/parser.nit:11537 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10926 */
+  /* parser/parser.nit:11538 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10927 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10928 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10929 */
+  /* parser/parser.nit:11539 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10930 */
+  /* parser/parser.nit:11540 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10932 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11541 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11542 */
+  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11543 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11544 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11545 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11547 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10932);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11547);
   }
-  /* ./parser//parser.nit:10934 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:11549 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10934);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11549);
   }
-  /* ./parser//parser.nit:10936 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AType, ID_AType)) /*cast nullable AType*/;
+  /* parser/parser.nit:11551 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10936);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11551);
   }
-  /* ./parser//parser.nit:10937 */
-  fra.me.REG[3] = NEW_AAsCastExpr_parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10942 */
+  /* parser/parser.nit:11553 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AType, ID_parser___parser_nodes___AType)) /*cast nullable AType*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11553);
+  }
+  /* parser/parser.nit:11555 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11555);
+  }
+  /* parser/parser.nit:11556 */
+  fra.me.REG[3] = NEW_AAsCastExpr_parser___parser_prod___AAsCastExpr___init_aascastexpr(fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11563 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10943 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction367____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11564 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10943);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11564);
   }
-  REGB0 = ATTR_parser___ReduceAction367____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction367___init(val_t p0, val_t p1, int* init_table){
-  int itpos339 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction367].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos339]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10946;
-  fra.me.meth = LOCATE_parser___ReduceAction367___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10946 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction367____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos339] = 1;
-  return;
-}
-void parser___ReduceAction368___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction400___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[8];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10950;
-  fra.me.meth = LOCATE_parser___ReduceAction368___action;
+  fra.me.line = 11569;
+  fra.me.meth = LOCATE_parser___ReduceAction400___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 9;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36630,109 +32221,100 @@ void parser___ReduceAction368___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
+  fra.me.REG[7] = NIT_NULL;
+  fra.me.REG[8] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10952 */
+  /* parser/parser.nit:11571 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10953 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10954 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10955 */
+  /* parser/parser.nit:11572 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10956 */
+  /* parser/parser.nit:11573 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10957 */
+  /* parser/parser.nit:11574 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10958 */
+  /* parser/parser.nit:11575 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10959 */
+  /* parser/parser.nit:11576 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10960 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10961 */
-  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10962 */
+  /* parser/parser.nit:11577 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10963 */
+  /* parser/parser.nit:11578 */
   fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10964 */
-  fra.me.REG[6] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10966 */
-  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11579 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11580 */
+  fra.me.REG[7] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11581 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11582 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11583 */
+  fra.me.REG[8] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11585 */
+  REGB0 = TAG_Bool((fra.me.REG[8]==NIT_NULL) || VAL_ISA(fra.me.REG[8], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10966);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11585);
   }
-  /* ./parser//parser.nit:10968 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwas, ID_TKwas)) /*cast nullable TKwas*/;
+  /* parser/parser.nit:11587 */
+  REGB0 = TAG_Bool((fra.me.REG[7]==NIT_NULL) || VAL_ISA(fra.me.REG[7], COLOR_parser___parser_nodes___TKwas, ID_parser___parser_nodes___TKwas)) /*cast nullable TKwas*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10968);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11587);
   }
-  /* ./parser//parser.nit:10970 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwnot, ID_TKwnot)) /*cast nullable TKwnot*/;
+  /* parser/parser.nit:11589 */
+  REGB0 = TAG_Bool((fra.me.REG[6]==NIT_NULL) || VAL_ISA(fra.me.REG[6], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10970);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11589);
   }
-  /* ./parser//parser.nit:10972 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TKwnull, ID_TKwnull)) /*cast nullable TKwnull*/;
+  /* parser/parser.nit:11591 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwnot, ID_parser___parser_nodes___TKwnot)) /*cast nullable TKwnot*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10972);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11591);
+  }
+  /* parser/parser.nit:11593 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwnull, ID_parser___parser_nodes___TKwnull)) /*cast nullable TKwnull*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11593);
   }
-  /* ./parser//parser.nit:10973 */
-  fra.me.REG[3] = NEW_AAsNotnullExpr_parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:10979 */
+  /* parser/parser.nit:11595 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11595);
+  }
+  /* parser/parser.nit:11596 */
+  fra.me.REG[3] = NEW_AAsNotnullExpr_parser___parser_prod___AAsNotnullExpr___init_aasnotnullexpr(fra.me.REG[8], fra.me.REG[7], fra.me.REG[6], fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11604 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:10980 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction368____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11605 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 10980);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11605);
   }
-  REGB0 = ATTR_parser___ReduceAction368____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction368___init(val_t p0, val_t p1, int* init_table){
-  int itpos340 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction368].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos340]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 10983;
-  fra.me.meth = LOCATE_parser___ReduceAction368___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:10983 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction368____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos340] = 1;
-  return;
-}
-void parser___ReduceAction369___action(val_t p0, val_t p1){
+void parser___ReduceAction401___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 10987;
-  fra.me.meth = LOCATE_parser___ReduceAction369___action;
+  fra.me.line = 11610;
+  fra.me.meth = LOCATE_parser___ReduceAction401___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36741,30 +32323,30 @@ void parser___ReduceAction369___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:10989 */
+  /* parser/parser.nit:11612 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:10990 */
+  /* parser/parser.nit:11613 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10991 */
+  /* parser/parser.nit:11614 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:10992 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:10994 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11615 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11617 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10994);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11617);
   }
-  /* ./parser//parser.nit:10996 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11619 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 10996);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11619);
   }
-  /* ./parser//parser.nit:10997 */
+  /* parser/parser.nit:11620 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:10998 */
+  /* parser/parser.nit:11621 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36773,66 +32355,43 @@ void parser___ReduceAction369___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:10999 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:11622 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11001 */
-  fra.me.REG[5] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
-  /* ./parser//parser.nit:11004 */
+  /* parser/parser.nit:11624 */
+  fra.me.REG[5] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[5]);
+  /* parser/parser.nit:11627 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11005 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction369____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11628 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11005);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11628);
   }
-  REGB0 = ATTR_parser___ReduceAction369____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction369___init(val_t p0, val_t p1, int* init_table){
-  int itpos341 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction369].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos341]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11008;
-  fra.me.meth = LOCATE_parser___ReduceAction369___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11008 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction369____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos341] = 1;
-  return;
-}
-void parser___ReduceAction370___action(val_t p0, val_t p1){
+void parser___ReduceAction402___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11012;
-  fra.me.meth = LOCATE_parser___ReduceAction370___action;
+  fra.me.line = 11633;
+  fra.me.meth = LOCATE_parser___ReduceAction402___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36842,41 +32401,41 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
   fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11014 */
+  /* parser/parser.nit:11635 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11015 */
+  /* parser/parser.nit:11636 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11016 */
+  /* parser/parser.nit:11637 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11017 */
+  /* parser/parser.nit:11638 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11018 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11020 */
-  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11639 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11641 */
+  REGB0 = TAG_Bool((fra.me.REG[5]!=NIT_NULL) && VAL_ISA(fra.me.REG[5], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11020);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11641);
   }
-  /* ./parser//parser.nit:11022 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11643 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11022);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11643);
   }
-  /* ./parser//parser.nit:11024 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:11645 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11024);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11645);
   }
-  /* ./parser//parser.nit:11025 */
+  /* parser/parser.nit:11646 */
   fra.me.REG[5] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[5]);
   fra.me.REG[6] = fra.me.REG[5];
-  /* ./parser//parser.nit:11026 */
+  /* parser/parser.nit:11647 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
   fra.me.REG[6] = fra.me.REG[4];
-  /* ./parser//parser.nit:11027 */
+  /* parser/parser.nit:11648 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36885,66 +32444,43 @@ void parser___ReduceAction370___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11028 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
+    /* parser/parser.nit:11649 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[6])(fra.me.REG[6], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11030 */
-  fra.me.REG[6] = NEW_ASuperstringExpr_parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
-  /* ./parser//parser.nit:11033 */
+  /* parser/parser.nit:11651 */
+  fra.me.REG[6] = NEW_ASuperstringExpr_parser___parser_prod___ASuperstringExpr___init_asuperstringexpr(fra.me.REG[6]);
+  /* parser/parser.nit:11654 */
   fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:11034 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction370____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11655 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11034);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11655);
   }
-  REGB0 = ATTR_parser___ReduceAction370____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction370___init(val_t p0, val_t p1, int* init_table){
-  int itpos342 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction370].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos342]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11037;
-  fra.me.meth = LOCATE_parser___ReduceAction370___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11037 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction370____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos342] = 1;
-  return;
-}
-void parser___ReduceAction371___action(val_t p0, val_t p1){
+void parser___ReduceAction403___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11041;
-  fra.me.meth = LOCATE_parser___ReduceAction371___action;
+  fra.me.line = 11660;
+  fra.me.meth = LOCATE_parser___ReduceAction403___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -36953,19 +32489,19 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11043 */
+  /* parser/parser.nit:11662 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11044 */
+  /* parser/parser.nit:11663 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11045 */
+  /* parser/parser.nit:11664 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11046 */
+  /* parser/parser.nit:11665 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11047 */
+  /* parser/parser.nit:11666 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11048 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11051 */
+  /* parser/parser.nit:11667 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11670 */
   REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36974,16 +32510,16 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11052 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+    /* parser/parser.nit:11671 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
   }
-  /* ./parser//parser.nit:11054 */
+  /* parser/parser.nit:11673 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -36992,508 +32528,333 @@ void parser___ReduceAction371___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11055 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:11674 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11057 */
+  /* parser/parser.nit:11676 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11058 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction371____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11058);
-  }
-  REGB0 = ATTR_parser___ReduceAction371____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction371___init(val_t p0, val_t p1, int* init_table){
-  int itpos343 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction371].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos343]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11061;
-  fra.me.meth = LOCATE_parser___ReduceAction371___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11061 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction371____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos343] = 1;
-  return;
-}
-void parser___ReduceAction372___action(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;
-  fra.me.line = 11065;
-  fra.me.meth = LOCATE_parser___ReduceAction372___action;
-  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.nit:11067 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11068 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11070 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TStartString, ID_TStartString)) /*cast nullable TStartString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11070);
-  }
-  /* ./parser//parser.nit:11071 */
-  fra.me.REG[3] = NEW_AStartStringExpr_parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11074 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11075 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction372____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11677 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11075);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11677);
   }
-  REGB0 = ATTR_parser___ReduceAction372____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction372___init(val_t p0, val_t p1, int* init_table){
-  int itpos344 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction372].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos344]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11078;
-  fra.me.meth = LOCATE_parser___ReduceAction372___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11078 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction372____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos344] = 1;
-  return;
-}
-void parser___ReduceAction374___action(val_t p0, val_t p1){
+void parser___ReduceAction404___action(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;
-  fra.me.line = 11082;
-  fra.me.meth = LOCATE_parser___ReduceAction374___action;
+  fra.me.line = 11682;
+  fra.me.meth = LOCATE_parser___ReduceAction404___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11084 */
+  /* parser/parser.nit:11684 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11085 */
+  /* parser/parser.nit:11685 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11087 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TMidString, ID_TMidString)) /*cast nullable TMidString*/;
+  /* parser/parser.nit:11687 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TStartString, ID_parser___parser_nodes___TStartString)) /*cast nullable TStartString*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11087);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11687);
   }
-  /* ./parser//parser.nit:11088 */
-  fra.me.REG[3] = NEW_AMidStringExpr_parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11091 */
+  /* parser/parser.nit:11688 */
+  fra.me.REG[3] = NEW_AStartStringExpr_parser___parser_prod___AStartStringExpr___init_astartstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11691 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11092 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction374____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11692 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11092);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11692);
   }
-  REGB0 = ATTR_parser___ReduceAction374____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction374___init(val_t p0, val_t p1, int* init_table){
-  int itpos345 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction374].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos345]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11095;
-  fra.me.meth = LOCATE_parser___ReduceAction374___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11095 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction374____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos345] = 1;
-  return;
-}
-void parser___ReduceAction375___action(val_t p0, val_t p1){
+void parser___ReduceAction406___action(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;
-  fra.me.line = 11099;
-  fra.me.meth = LOCATE_parser___ReduceAction375___action;
+  fra.me.line = 11697;
+  fra.me.meth = LOCATE_parser___ReduceAction406___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[2] = NIT_NULL;
-  fra.me.REG[3] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11101 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11102 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11104 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TEndString, ID_TEndString)) /*cast nullable TEndString*/;
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11104);
-  }
-  /* ./parser//parser.nit:11105 */
-  fra.me.REG[3] = NEW_AEndStringExpr_parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
-  /* ./parser//parser.nit:11108 */
-  fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11109 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction375____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11109);
-  }
-  REGB0 = ATTR_parser___ReduceAction375____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction375___init(val_t p0, val_t p1, int* init_table){
-  int itpos346 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction375].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos346]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11112;
-  fra.me.meth = LOCATE_parser___ReduceAction375___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11112 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction375____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos346] = 1;
-  return;
-}
-void parser___ReduceAction376___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
-  val_t REGB0;
-  val_t REGB1;
-  val_t tmp;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11116;
-  fra.me.meth = LOCATE_parser___ReduceAction376___action;
-  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.nit:11118 */
-  fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11119 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11120 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11121 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11122 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11123 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11124 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11126 */
-  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;
-    }
-  }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[0] = p0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11699 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11700 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11702 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TMidString, ID_parser___parser_nodes___TMidString)) /*cast nullable TMidString*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11127 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11702);
   }
-  /* ./parser//parser.nit:11129 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11130 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction376____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11703 */
+  fra.me.REG[3] = NEW_AMidStringExpr_parser___parser_prod___AMidStringExpr___init_amidstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11706 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11707 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11130);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11707);
   }
-  REGB0 = ATTR_parser___ReduceAction376____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction376___init(val_t p0, val_t p1, int* init_table){
-  int itpos347 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction376].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction407___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos347]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11133;
-  fra.me.meth = LOCATE_parser___ReduceAction376___init;
+  fra.me.line = 11712;
+  fra.me.meth = LOCATE_parser___ReduceAction407___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11133 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction376____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11714 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11715 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11717 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TEndString, ID_parser___parser_nodes___TEndString)) /*cast nullable TEndString*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11717);
+  }
+  /* parser/parser.nit:11718 */
+  fra.me.REG[3] = NEW_AEndStringExpr_parser___parser_prod___AEndStringExpr___init_aendstringexpr(fra.me.REG[3]);
+  /* parser/parser.nit:11721 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11722 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11722);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos347] = 1;
   return;
 }
-void parser___ReduceAction377___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
+void parser___ReduceAction408___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
-  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11137;
-  fra.me.meth = LOCATE_parser___ReduceAction377___action;
+  fra.me.line = 11727;
+  fra.me.meth = LOCATE_parser___ReduceAction408___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 6;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11139 */
+  /* parser/parser.nit:11729 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11140 */
+  /* parser/parser.nit:11730 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11141 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11142 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11143 */
+  /* parser/parser.nit:11731 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11144 */
+  /* parser/parser.nit:11732 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11145 */
+  /* parser/parser.nit:11733 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11146 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11149 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11734 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11736 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11149);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11736);
   }
-  /* ./parser//parser.nit:11150 */
-  REGB0 = TAG_Bool(fra.me.REG[4]==NIT_NULL);
+  /* parser/parser.nit:11738 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   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("Assert failed", NULL, LOCATE_parser, 11738);
   }
-  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  /* parser/parser.nit:11739 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:11741 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11151 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11741);
   }
-  /* ./parser//parser.nit:11153 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
-  fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:11154 */
-  fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11155 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction377____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11742 */
+  fra.me.REG[3] = NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:11747 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11748 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11155);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11748);
   }
-  REGB0 = ATTR_parser___ReduceAction377____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction377___init(val_t p0, val_t p1, int* init_table){
-  int itpos348 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction377].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction409___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos348]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11158;
-  fra.me.meth = LOCATE_parser___ReduceAction377___init;
+  fra.me.line = 11753;
+  fra.me.meth = LOCATE_parser___ReduceAction409___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11158 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction377____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11755 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11756 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11757 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11758 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11759 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11761 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TOpar, ID_parser___parser_nodes___TOpar)) /*cast nullable TOpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11761);
+  }
+  /* parser/parser.nit:11763 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCpar, ID_parser___parser_nodes___TCpar)) /*cast nullable TCpar*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11763);
+  }
+  /* parser/parser.nit:11764 */
+  fra.me.REG[3] = NEW_AParExprs_parser___parser_prod___AParExprs___init_aparexprs(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:11769 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11770 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11770);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos348] = 1;
   return;
 }
-void parser___ReduceAction379___action(val_t p0, val_t p1){
+void parser___ReduceAction410___action(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;
-  fra.me.line = 11162;
-  fra.me.meth = LOCATE_parser___ReduceAction379___action;
+  fra.me.line = 11775;
+  fra.me.meth = LOCATE_parser___ReduceAction410___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11164 */
+  /* parser/parser.nit:11777 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11165 */
-  fra.me.REG[3] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11166 */
+  /* parser/parser.nit:11778 */
+  fra.me.REG[3] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11779 */
+  fra.me.REG[3] = NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(fra.me.REG[3]);
+  /* parser/parser.nit:11782 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11167 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction379____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11783 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11167);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11783);
   }
-  REGB0 = ATTR_parser___ReduceAction379____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction379___init(val_t p0, val_t p1, int* init_table){
-  int itpos349 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction379].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos349]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11170;
-  fra.me.meth = LOCATE_parser___ReduceAction379___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11170 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction379____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos349] = 1;
-  return;
-}
-void parser___ReduceAction382___action(val_t p0, val_t p1){
+void parser___ReduceAction412___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11174;
-  fra.me.meth = LOCATE_parser___ReduceAction382___action;
+  fra.me.line = 11788;
+  fra.me.meth = LOCATE_parser___ReduceAction412___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37501,13 +32862,19 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11176 */
+  /* parser/parser.nit:11790 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11177 */
+  /* parser/parser.nit:11791 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11178 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11180 */
+  /* parser/parser.nit:11792 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11794 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11794);
+  }
+  /* parser/parser.nit:11795 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37516,128 +32883,112 @@ void parser___ReduceAction382___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11181 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:11796 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11183 */
+  /* parser/parser.nit:11798 */
+  fra.me.REG[4] = NEW_AListExprs_parser___parser_prod___AListExprs___init_alistexprs(fra.me.REG[4]);
+  /* parser/parser.nit:11801 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11184 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction382____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11802 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11184);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11802);
   }
-  REGB0 = ATTR_parser___ReduceAction382____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction382___init(val_t p0, val_t p1, int* init_table){
-  int itpos350 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction382].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos350]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11187;
-  fra.me.meth = LOCATE_parser___ReduceAction382___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11187 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction382____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos350] = 1;
-  return;
-}
-void parser___ReduceAction387___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction415___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11191;
-  fra.me.meth = LOCATE_parser___ReduceAction387___action;
+  fra.me.line = 11807;
+  fra.me.meth = LOCATE_parser___ReduceAction415___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11193 */
+  /* parser/parser.nit:11809 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11194 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11195 */
+  /* parser/parser.nit:11810 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11196 */
+  /* parser/parser.nit:11811 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11197 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11199 */
+  /* parser/parser.nit:11812 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11813 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11814 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11816 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TObra, ID_parser___parser_nodes___TObra)) /*cast nullable TObra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11816);
+  }
+  /* parser/parser.nit:11818 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11818);
+  }
+  /* parser/parser.nit:11819 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:11821 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TCbra, ID_parser___parser_nodes___TCbra)) /*cast nullable TCbra*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11821);
+  }
+  /* parser/parser.nit:11822 */
+  fra.me.REG[3] = NEW_ABraExprs_parser___parser_prod___ABraExprs___init_abraexprs(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:11827 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11200 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction387____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11828 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11200);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11828);
   }
-  REGB0 = ATTR_parser___ReduceAction387____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction387___init(val_t p0, val_t p1, int* init_table){
-  int itpos351 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction387].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos351]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11203;
-  fra.me.meth = LOCATE_parser___ReduceAction387___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11203 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction387____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos351] = 1;
-  return;
-}
-void parser___ReduceAction388___action(val_t p0, val_t p1){
+void parser___ReduceAction416___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11207;
-  fra.me.meth = LOCATE_parser___ReduceAction388___action;
+  fra.me.line = 11833;
+  fra.me.meth = LOCATE_parser___ReduceAction416___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37645,144 +32996,171 @@ void parser___ReduceAction388___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11209 */
+  /* parser/parser.nit:11835 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11210 */
+  /* parser/parser.nit:11836 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11211 */
+  /* parser/parser.nit:11837 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11212 */
-  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11213 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11215 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11838 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11840 */
+  REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11215);
+    REGB1 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
+    if (UNTAG_Bool(REGB1)) {
+      REGB1 = TAG_Bool(false);
+      REGB0 = REGB1;
+    } else {
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
   }
-  /* ./parser//parser.nit:11216 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11217 */
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:11841 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:11843 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11218 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction388____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11844 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11218);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11844);
   }
-  REGB0 = ATTR_parser___ReduceAction388____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction388___init(val_t p0, val_t p1, int* init_table){
-  int itpos352 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction388].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos352]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11221;
-  fra.me.meth = LOCATE_parser___ReduceAction388___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11221 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction388____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos352] = 1;
-  return;
-}
-void parser___ReduceAction389___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction417___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11225;
-  fra.me.meth = LOCATE_parser___ReduceAction389___action;
+  fra.me.line = 11849;
+  fra.me.meth = LOCATE_parser___ReduceAction417___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11227 */
+  /* parser/parser.nit:11851 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11228 */
+  /* parser/parser.nit:11852 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11229 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11231 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11853 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11854 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11855 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11858 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11231);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11858);
   }
-  /* ./parser//parser.nit:11232 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11233 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11234 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction389____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11859 */
+  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_standard___kernel___Object_____eqeq(fra.me.REG[4])(fra.me.REG[4], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:11860 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[4]);
+  }
+  /* parser/parser.nit:11862 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
+  fra.me.REG[5] = fra.me.REG[3];
+  /* parser/parser.nit:11863 */
+  fra.me.REG[2] = fra.me.REG[5];
+  /* parser/parser.nit:11864 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11234);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11864);
   }
-  REGB0 = ATTR_parser___ReduceAction389____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction389___init(val_t p0, val_t p1, int* init_table){
-  int itpos353 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction389].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction418___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos353]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11237;
-  fra.me.meth = LOCATE_parser___ReduceAction389___init;
+  fra.me.line = 11869;
+  fra.me.meth = LOCATE_parser___ReduceAction418___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11237 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction389____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11871 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11872 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11873 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11874 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11875 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11877 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11878 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11878);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos353] = 1;
   return;
 }
-void parser___ReduceAction390___action(val_t p0, val_t p1){
+void parser___ReduceAction419___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11241;
-  fra.me.meth = LOCATE_parser___ReduceAction390___action;
+  fra.me.line = 11883;
+  fra.me.meth = LOCATE_parser___ReduceAction419___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37790,13 +33168,13 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11243 */
+  /* parser/parser.nit:11885 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11244 */
+  /* parser/parser.nit:11886 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11245 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11247 */
+  /* parser/parser.nit:11887 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11889 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37805,64 +33183,41 @@ void parser___ReduceAction390___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
-  if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11248 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
-  }
-  /* ./parser//parser.nit:11250 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11251 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction390____goto(fra.me.REG[0])!=NIT_NULL);
-  if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11251);
-  }
-  REGB0 = ATTR_parser___ReduceAction390____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction390___init(val_t p0, val_t p1, int* init_table){
-  int itpos354 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction390].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos354]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11254;
-  fra.me.meth = LOCATE_parser___ReduceAction390___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11254 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction390____goto(fra.me.REG[1]) = REGB0;
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:11890 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:11892 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:11893 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11893);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos354] = 1;
   return;
 }
-void parser___ReduceAction391___action(val_t p0, val_t p1){
+void parser___ReduceAction420___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11258;
-  fra.me.meth = LOCATE_parser___ReduceAction391___action;
+  fra.me.line = 11898;
+  fra.me.meth = LOCATE_parser___ReduceAction420___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37871,30 +33226,30 @@ void parser___ReduceAction391___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11260 */
+  /* parser/parser.nit:11900 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11261 */
+  /* parser/parser.nit:11901 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11262 */
+  /* parser/parser.nit:11902 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11263 */
+  /* parser/parser.nit:11903 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11264 */
+  /* parser/parser.nit:11904 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11265 */
+  /* parser/parser.nit:11905 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11266 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11268 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11906 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11908 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11268);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11908);
   }
-  /* ./parser//parser.nit:11270 */
+  /* parser/parser.nit:11910 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11271 */
+  /* parser/parser.nit:11911 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -37903,63 +33258,40 @@ void parser___ReduceAction391___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11272 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:11912 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11274 */
+  /* parser/parser.nit:11914 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11275 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction391____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11915 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11275);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11915);
   }
-  REGB0 = ATTR_parser___ReduceAction391____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction391___init(val_t p0, val_t p1, int* init_table){
-  int itpos355 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction391].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos355]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11278;
-  fra.me.meth = LOCATE_parser___ReduceAction391___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11278 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction391____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos355] = 1;
-  return;
-}
-void parser___ReduceAction392___action(val_t p0, val_t p1){
+void parser___ReduceAction421___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11282;
-  fra.me.meth = LOCATE_parser___ReduceAction392___action;
+  fra.me.line = 11920;
+  fra.me.meth = LOCATE_parser___ReduceAction421___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -37967,68 +33299,45 @@ void parser___ReduceAction392___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11284 */
+  /* parser/parser.nit:11922 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11285 */
+  /* parser/parser.nit:11923 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11286 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11288 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:11924 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11926 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11288);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11926);
   }
-  /* ./parser//parser.nit:11289 */
-  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:11293 */
+  /* parser/parser.nit:11927 */
+  fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:11932 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11294 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction392____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11933 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11294);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11933);
   }
-  REGB0 = ATTR_parser___ReduceAction392____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction392___init(val_t p0, val_t p1, int* init_table){
-  int itpos356 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction392].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos356]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11297;
-  fra.me.meth = LOCATE_parser___ReduceAction392___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11297 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction392____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos356] = 1;
-  return;
-}
-void parser___ReduceAction393___action(val_t p0, val_t p1){
+void parser___ReduceAction422___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11301;
-  fra.me.meth = LOCATE_parser___ReduceAction393___action;
+  fra.me.line = 11938;
+  fra.me.meth = LOCATE_parser___ReduceAction422___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38037,331 +33346,446 @@ void parser___ReduceAction393___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11303 */
+  /* parser/parser.nit:11940 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11304 */
+  /* parser/parser.nit:11941 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11305 */
+  /* parser/parser.nit:11942 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11306 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11308 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11943 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11945 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11308);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11945);
   }
-  /* ./parser//parser.nit:11309 */
+  /* parser/parser.nit:11946 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11311 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TClassid, ID_TClassid)) /*cast nullable TClassid*/;
+  /* parser/parser.nit:11948 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11311);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11948);
   }
-  /* ./parser//parser.nit:11312 */
-  fra.me.REG[3] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
-  /* ./parser//parser.nit:11316 */
+  /* parser/parser.nit:11949 */
+  fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(NIT_NULL, fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:11954 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11317 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction393____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11955 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11317);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11955);
   }
-  REGB0 = ATTR_parser___ReduceAction393____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction393___init(val_t p0, val_t p1, int* init_table){
-  int itpos357 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction393].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction423___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos357]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11320;
-  fra.me.meth = LOCATE_parser___ReduceAction393___init;
+  fra.me.line = 11960;
+  fra.me.meth = LOCATE_parser___ReduceAction423___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11320 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction393____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:11962 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:11963 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11964 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11965 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11966 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11968 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11968);
+  }
+  /* parser/parser.nit:11970 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11970);
+  }
+  /* parser/parser.nit:11971 */
+  fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[4], fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:11976 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:11977 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11977);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos357] = 1;
   return;
 }
-void parser___ReduceAction394___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
+void parser___ReduceAction424___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11324;
-  fra.me.meth = LOCATE_parser___ReduceAction394___action;
+  fra.me.line = 11982;
+  fra.me.meth = LOCATE_parser___ReduceAction424___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 5;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
+  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11326 */
+  /* parser/parser.nit:11984 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11327 */
+  /* parser/parser.nit:11985 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11328 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11330 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:11986 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11987 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11988 */
+  fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:11989 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:11991 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TQuad, ID_parser___parser_nodes___TQuad)) /*cast nullable TQuad*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11330);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11991);
   }
-  /* ./parser//parser.nit:11331 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
-  fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11332 */
-  fra.me.REG[4] = NEW_AQualified_parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
-  /* ./parser//parser.nit:11336 */
-  fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11337 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction394____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:11993 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11993);
+  }
+  /* parser/parser.nit:11994 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[4]);
+  fra.me.REG[6] = fra.me.REG[4];
+  /* parser/parser.nit:11996 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11337);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 11996);
   }
-  REGB0 = ATTR_parser___ReduceAction394____goto(fra.me.REG[0]);
+  /* parser/parser.nit:11997 */
+  fra.me.REG[3] = NEW_AModuleName_parser___parser_prod___AModuleName___init_amodulename(fra.me.REG[5], fra.me.REG[6], fra.me.REG[3]);
+  /* parser/parser.nit:12002 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:12003 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12003);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction394___init(val_t p0, val_t p1, int* init_table){
-  int itpos358 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction394].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction425___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos358]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11340;
-  fra.me.meth = LOCATE_parser___ReduceAction394___init;
+  fra.me.line = 12008;
+  fra.me.meth = LOCATE_parser___ReduceAction425___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11340 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction394____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:12010 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:12011 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12012 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12014 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12014);
+  }
+  /* parser/parser.nit:12015 */
+  fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12019 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:12020 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12020);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos358] = 1;
   return;
 }
-void parser___ReduceAction395___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
+void parser___ReduceAction426___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11344;
-  fra.me.meth = LOCATE_parser___ReduceAction395___action;
+  fra.me.line = 12025;
+  fra.me.meth = LOCATE_parser___ReduceAction426___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 4;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
+  fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11346 */
+  /* parser/parser.nit:12027 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11347 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11348 */
+  /* parser/parser.nit:12028 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11349 */
-  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11351 */
+  /* parser/parser.nit:12029 */
+  fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12030 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12032 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12032);
+  }
+  /* parser/parser.nit:12033 */
+  fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
+  fra.me.REG[5] = fra.me.REG[4];
+  /* parser/parser.nit:12035 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TClassid, ID_parser___parser_nodes___TClassid)) /*cast nullable TClassid*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12035);
+  }
+  /* parser/parser.nit:12036 */
+  fra.me.REG[3] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[5], fra.me.REG[3]);
+  /* parser/parser.nit:12040 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11352 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction395____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12041 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11352);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12041);
   }
-  REGB0 = ATTR_parser___ReduceAction395____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction395___init(val_t p0, val_t p1, int* init_table){
-  int itpos359 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction395].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction427___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos359]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11355;
-  fra.me.meth = LOCATE_parser___ReduceAction395___init;
+  fra.me.line = 12046;
+  fra.me.meth = LOCATE_parser___ReduceAction427___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11355 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction395____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:12048 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:12049 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12050 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12052 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12052);
+  }
+  /* parser/parser.nit:12053 */
+  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
+  fra.me.REG[4] = fra.me.REG[3];
+  /* parser/parser.nit:12054 */
+  fra.me.REG[4] = NEW_AQualified_parser___parser_prod___AQualified___init_aqualified(fra.me.REG[4], NIT_NULL);
+  /* parser/parser.nit:12058 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:12059 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12059);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos359] = 1;
   return;
 }
-void parser___ReduceAction396___action(val_t p0, val_t p1){
+void parser___ReduceAction428___action(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;
-  fra.me.line = 11359;
-  fra.me.meth = LOCATE_parser___ReduceAction396___action;
+  fra.me.line = 12064;
+  fra.me.meth = LOCATE_parser___ReduceAction428___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11361 */
+  /* parser/parser.nit:12066 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11362 */
+  /* parser/parser.nit:12067 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11363 */
+  /* parser/parser.nit:12068 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11364 */
+  /* parser/parser.nit:12069 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11366 */
+  /* parser/parser.nit:12071 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11367 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction396____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12072 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11367);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12072);
   }
-  REGB0 = ATTR_parser___ReduceAction396____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction396___init(val_t p0, val_t p1, int* init_table){
-  int itpos360 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction396].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos360]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11370;
-  fra.me.meth = LOCATE_parser___ReduceAction396___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11370 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction396____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos360] = 1;
-  return;
-}
-void parser___ReduceAction397___action(val_t p0, val_t p1){
+void parser___ReduceAction429___action(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;
-  fra.me.line = 11374;
-  fra.me.meth = LOCATE_parser___ReduceAction397___action;
+  fra.me.line = 12077;
+  fra.me.meth = LOCATE_parser___ReduceAction429___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11376 */
+  /* parser/parser.nit:12079 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11377 */
+  /* parser/parser.nit:12080 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11378 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction397____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12081 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12082 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12084 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:12085 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11378);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12085);
   }
-  REGB0 = ATTR_parser___ReduceAction397____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction397___init(val_t p0, val_t p1, int* init_table){
-  int itpos361 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction397].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction430___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[3];} fra;
   val_t REGB0;
   val_t tmp;
-  if (init_table[itpos361]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11381;
-  fra.me.meth = LOCATE_parser___ReduceAction397___init;
+  fra.me.line = 12090;
+  fra.me.meth = LOCATE_parser___ReduceAction430___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11381 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction397____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:12092 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:12093 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12094 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12094);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos361] = 1;
   return;
 }
-void parser___ReduceAction399___action(val_t p0, val_t p1){
+void parser___ReduceAction432___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11385;
-  fra.me.meth = LOCATE_parser___ReduceAction399___action;
+  fra.me.line = 12099;
+  fra.me.meth = LOCATE_parser___ReduceAction432___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38369,71 +33793,48 @@ void parser___ReduceAction399___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11387 */
+  /* parser/parser.nit:12101 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11388 */
+  /* parser/parser.nit:12102 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11389 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11391 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12103 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12105 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11391);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12105);
   }
-  /* ./parser//parser.nit:11392 */
+  /* parser/parser.nit:12106 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11393 */
-  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:11396 */
+  /* parser/parser.nit:12107 */
+  fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
+  /* parser/parser.nit:12110 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11397 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction399____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12111 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11397);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12111);
   }
-  REGB0 = ATTR_parser___ReduceAction399____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction399___init(val_t p0, val_t p1, int* init_table){
-  int itpos362 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction399].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos362]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11400;
-  fra.me.meth = LOCATE_parser___ReduceAction399___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11400 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction399____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos362] = 1;
-  return;
-}
-void parser___ReduceAction400___action(val_t p0, val_t p1){
+void parser___ReduceAction433___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11404;
-  fra.me.meth = LOCATE_parser___ReduceAction400___action;
+  fra.me.line = 12116;
+  fra.me.meth = LOCATE_parser___ReduceAction433___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38441,304 +33842,189 @@ void parser___ReduceAction400___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11406 */
+  /* parser/parser.nit:12118 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11407 */
+  /* parser/parser.nit:12119 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11408 */
+  /* parser/parser.nit:12120 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11409 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11411 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12121 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12123 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11411);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12123);
   }
-  /* ./parser//parser.nit:11412 */
+  /* parser/parser.nit:12124 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[4], fra.me.REG[3]);
   fra.me.REG[4] = fra.me.REG[3];
-  /* ./parser//parser.nit:11413 */
-  fra.me.REG[4] = NEW_ADoc_parser_prod___ADoc___init_adoc(fra.me.REG[4]);
-  /* ./parser//parser.nit:11416 */
+  /* parser/parser.nit:12125 */
+  fra.me.REG[4] = NEW_ADoc_parser___parser_prod___ADoc___init_adoc(fra.me.REG[4]);
+  /* parser/parser.nit:12128 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11417 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction400____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12129 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11417);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12129);
   }
-  REGB0 = ATTR_parser___ReduceAction400____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction400___init(val_t p0, val_t p1, int* init_table){
-  int itpos363 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction400].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos363]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11420;
-  fra.me.meth = LOCATE_parser___ReduceAction400___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11420 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction400____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos363] = 1;
-  return;
-}
-void parser___ReduceAction402___action(val_t p0, val_t p1){
+void parser___ReduceAction435___action(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;
-  fra.me.line = 11424;
-  fra.me.meth = LOCATE_parser___ReduceAction402___action;
+  fra.me.line = 12134;
+  fra.me.meth = LOCATE_parser___ReduceAction435___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 3;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11426 */
+  /* parser/parser.nit:12136 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11427 */
+  /* parser/parser.nit:12137 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11428 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction402____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12138 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11428);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12138);
   }
-  REGB0 = ATTR_parser___ReduceAction402____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction402___init(val_t p0, val_t p1, int* init_table){
-  int itpos364 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction402].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos364]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11431;
-  fra.me.meth = LOCATE_parser___ReduceAction402___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11431 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction402____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos364] = 1;
-  return;
-}
-void parser___ReduceAction403___action(val_t p0, val_t p1){
+void parser___ReduceAction436___action(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;
-  fra.me.line = 11435;
-  fra.me.meth = LOCATE_parser___ReduceAction403___action;
+  fra.me.line = 12143;
+  fra.me.meth = LOCATE_parser___ReduceAction436___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11437 */
+  /* parser/parser.nit:12145 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11438 */
+  /* parser/parser.nit:12146 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11440 */
+  /* parser/parser.nit:12148 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11441 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction403____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12149 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11441);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12149);
   }
-  REGB0 = ATTR_parser___ReduceAction403____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction403___init(val_t p0, val_t p1, int* init_table){
-  int itpos365 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction403].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos365]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11444;
-  fra.me.meth = LOCATE_parser___ReduceAction403___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11444 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction403____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos365] = 1;
-  return;
-}
-void parser___ReduceAction404___action(val_t p0, val_t p1){
+void parser___ReduceAction437___action(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;
-  fra.me.line = 11448;
-  fra.me.meth = LOCATE_parser___ReduceAction404___action;
+  fra.me.line = 12154;
+  fra.me.meth = LOCATE_parser___ReduceAction437___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11450 */
+  /* parser/parser.nit:12156 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11451 */
+  /* parser/parser.nit:12157 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11452 */
+  /* parser/parser.nit:12158 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11453 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction404____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12159 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11453);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12159);
   }
-  REGB0 = ATTR_parser___ReduceAction404____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction404___init(val_t p0, val_t p1, int* init_table){
-  int itpos366 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction404].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos366]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11456;
-  fra.me.meth = LOCATE_parser___ReduceAction404___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11456 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction404____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos366] = 1;
-  return;
-}
-void parser___ReduceAction405___action(val_t p0, val_t p1){
+void parser___ReduceAction438___action(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;
-  fra.me.line = 11460;
-  fra.me.meth = LOCATE_parser___ReduceAction405___action;
+  fra.me.line = 12164;
+  fra.me.meth = LOCATE_parser___ReduceAction438___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11462 */
+  /* parser/parser.nit:12166 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11463 */
+  /* parser/parser.nit:12167 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11464 */
+  /* parser/parser.nit:12168 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11465 */
+  /* parser/parser.nit:12169 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11466 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction405____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12170 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11466);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12170);
   }
-  REGB0 = ATTR_parser___ReduceAction405____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction405___init(val_t p0, val_t p1, int* init_table){
-  int itpos367 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction405].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos367]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11469;
-  fra.me.meth = LOCATE_parser___ReduceAction405___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11469 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction405____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos367] = 1;
-  return;
-}
-void parser___ReduceAction657___action(val_t p0, val_t p1){
+void parser___ReduceAction698___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11473;
-  fra.me.meth = LOCATE_parser___ReduceAction657___action;
+  fra.me.line = 12175;
+  fra.me.meth = LOCATE_parser___ReduceAction698___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38747,82 +34033,59 @@ void parser___ReduceAction657___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11475 */
+  /* parser/parser.nit:12177 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11476 */
+  /* parser/parser.nit:12178 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11477 */
+  /* parser/parser.nit:12179 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11478 */
+  /* parser/parser.nit:12180 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11480 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_TKwisset, ID_TKwisset)) /*cast nullable TKwisset*/;
+  /* parser/parser.nit:12182 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___TKwisset, ID_parser___parser_nodes___TKwisset)) /*cast nullable TKwisset*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11480);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12182);
   }
-  /* ./parser//parser.nit:11482 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12184 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11482);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12184);
   }
-  /* ./parser//parser.nit:11484 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12186 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11484);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12186);
   }
-  /* ./parser//parser.nit:11485 */
-  fra.me.REG[3] = NEW_AIssetAttrExpr_parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:11490 */
+  /* parser/parser.nit:12187 */
+  fra.me.REG[3] = NEW_AIssetAttrExpr_parser___parser_prod___AIssetAttrExpr___init_aissetattrexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12192 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11491 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction657____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12193 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11491);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12193);
   }
-  REGB0 = ATTR_parser___ReduceAction657____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction657___init(val_t p0, val_t p1, int* init_table){
-  int itpos368 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction657].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos368]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11494;
-  fra.me.meth = LOCATE_parser___ReduceAction657___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11494 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction657____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos368] = 1;
-  return;
-}
-void parser___ReduceAction658___action(val_t p0, val_t p1){
+void parser___ReduceAction699___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11498;
-  fra.me.meth = LOCATE_parser___ReduceAction658___action;
+  fra.me.line = 12198;
+  fra.me.meth = LOCATE_parser___ReduceAction699___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38830,74 +34093,51 @@ void parser___ReduceAction658___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11500 */
+  /* parser/parser.nit:12200 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11501 */
+  /* parser/parser.nit:12201 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11502 */
+  /* parser/parser.nit:12202 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11504 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12204 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11504);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12204);
   }
-  /* ./parser//parser.nit:11506 */
-  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_TAttrid, ID_TAttrid)) /*cast nullable TAttrid*/;
+  /* parser/parser.nit:12206 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___TAttrid, ID_parser___parser_nodes___TAttrid)) /*cast nullable TAttrid*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11506);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12206);
   }
-  /* ./parser//parser.nit:11507 */
-  fra.me.REG[3] = NEW_AAttrExpr_parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
-  /* ./parser//parser.nit:11511 */
+  /* parser/parser.nit:12207 */
+  fra.me.REG[3] = NEW_AAttrExpr_parser___parser_prod___AAttrExpr___init_aattrexpr(fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12211 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11512 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction658____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12212 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11512);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12212);
   }
-  REGB0 = ATTR_parser___ReduceAction658____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction658___init(val_t p0, val_t p1, int* init_table){
-  int itpos369 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction658].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos369]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11515;
-  fra.me.meth = LOCATE_parser___ReduceAction658___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11515 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction658____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos369] = 1;
-  return;
-}
-void parser___ReduceAction659___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[7];} fra;
+void parser___ReduceAction700___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11519;
-  fra.me.meth = LOCATE_parser___ReduceAction659___action;
+  fra.me.line = 12217;
+  fra.me.meth = LOCATE_parser___ReduceAction700___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 8;
+  fra.me.REG_size = 7;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -38905,303 +34145,199 @@ void parser___ReduceAction659___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[6] = NIT_NULL;
-  fra.me.REG[7] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11521 */
+  /* parser/parser.nit:12219 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11522 */
+  /* parser/parser.nit:12220 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11523 */
+  /* parser/parser.nit:12221 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11524 */
+  /* parser/parser.nit:12222 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11525 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11526 */
-  fra.me.REG[7] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11528 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12223 */
+  fra.me.REG[6] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12225 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11528);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12225);
   }
-  /* ./parser//parser.nit:11530 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TId, ID_TId)) /*cast nullable TId*/;
+  /* parser/parser.nit:12227 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TId, ID_parser___parser_nodes___TId)) /*cast nullable TId*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11530);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12227);
   }
-  /* ./parser//parser.nit:11532 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12229 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11532);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12229);
   }
-  /* ./parser//parser.nit:11533 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:11534 */
-  fra.me.REG[7] = NEW_ACallExpr_parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6], fra.me.REG[7]);
-  /* ./parser//parser.nit:11540 */
-  fra.me.REG[2] = fra.me.REG[7];
-  /* ./parser//parser.nit:11541 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction659____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12230 */
+  fra.me.REG[6] = NEW_ACallExpr_parser___parser_prod___ACallExpr___init_acallexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3], fra.me.REG[6]);
+  /* parser/parser.nit:12236 */
+  fra.me.REG[2] = fra.me.REG[6];
+  /* parser/parser.nit:12237 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11541);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12237);
   }
-  REGB0 = ATTR_parser___ReduceAction659____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction659___init(val_t p0, val_t p1, int* init_table){
-  int itpos370 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction659].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos370]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11544;
-  fra.me.meth = LOCATE_parser___ReduceAction659___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11544 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction659____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos370] = 1;
-  return;
-}
-void parser___ReduceAction662___action(val_t p0, val_t p1){
-  struct {struct stack_frame_t me; val_t MORE_REG[6];} fra;
+void parser___ReduceAction703___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11548;
-  fra.me.meth = LOCATE_parser___ReduceAction662___action;
+  fra.me.line = 12242;
+  fra.me.meth = LOCATE_parser___ReduceAction703___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 7;
+  fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[5] = NIT_NULL;
-  fra.me.REG[6] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11550 */
+  /* parser/parser.nit:12244 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11551 */
+  /* parser/parser.nit:12245 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11552 */
+  /* parser/parser.nit:12246 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11553 */
+  /* parser/parser.nit:12247 */
   fra.me.REG[5] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11554 */
-  fra.me.REG[6] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11556 */
-  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_AExpr, ID_AExpr)) /*cast nullable AExpr*/;
+  /* parser/parser.nit:12249 */
+  REGB0 = TAG_Bool((fra.me.REG[5]==NIT_NULL) || VAL_ISA(fra.me.REG[5], COLOR_parser___parser_nodes___AExpr, ID_parser___parser_nodes___AExpr)) /*cast nullable AExpr*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11556);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12249);
   }
-  /* ./parser//parser.nit:11558 */
-  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_TKwinit, ID_TKwinit)) /*cast nullable TKwinit*/;
+  /* parser/parser.nit:12251 */
+  REGB0 = TAG_Bool((fra.me.REG[4]==NIT_NULL) || VAL_ISA(fra.me.REG[4], COLOR_parser___parser_nodes___TKwinit, ID_parser___parser_nodes___TKwinit)) /*cast nullable TKwinit*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11558);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12251);
   }
-  /* ./parser//parser.nit:11560 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12253 */
+  REGB0 = TAG_Bool((fra.me.REG[3]==NIT_NULL) || VAL_ISA(fra.me.REG[3], COLOR_parser___parser_nodes___AExprs, ID_parser___parser_nodes___AExprs)) /*cast nullable AExprs*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11560);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12253);
   }
-  /* ./parser//parser.nit:11561 */
-  fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[6], fra.me.REG[3]);
-  fra.me.REG[6] = fra.me.REG[3];
-  /* ./parser//parser.nit:11562 */
-  fra.me.REG[6] = NEW_AInitExpr_parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[6]);
-  /* ./parser//parser.nit:11567 */
-  fra.me.REG[2] = fra.me.REG[6];
-  /* ./parser//parser.nit:11568 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction662____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12254 */
+  fra.me.REG[3] = NEW_AInitExpr_parser___parser_prod___AInitExpr___init_ainitexpr(fra.me.REG[5], fra.me.REG[4], fra.me.REG[3]);
+  /* parser/parser.nit:12259 */
+  fra.me.REG[2] = fra.me.REG[3];
+  /* parser/parser.nit:12260 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11568);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12260);
   }
-  REGB0 = ATTR_parser___ReduceAction662____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction662___init(val_t p0, val_t p1, int* init_table){
-  int itpos371 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction662].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos371]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11571;
-  fra.me.meth = LOCATE_parser___ReduceAction662___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11571 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction662____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos371] = 1;
-  return;
-}
-void parser___ReduceAction675___action(val_t p0, val_t p1){
+void parser___ReduceAction716___action(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;
-  fra.me.line = 11575;
-  fra.me.meth = LOCATE_parser___ReduceAction675___action;
+  fra.me.line = 12265;
+  fra.me.meth = LOCATE_parser___ReduceAction716___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11577 */
+  /* parser/parser.nit:12267 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11578 */
+  /* parser/parser.nit:12268 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11579 */
+  /* parser/parser.nit:12269 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11580 */
+  /* parser/parser.nit:12270 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11582 */
+  /* parser/parser.nit:12272 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11583 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction675____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12273 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11583);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12273);
   }
-  REGB0 = ATTR_parser___ReduceAction675____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction675___init(val_t p0, val_t p1, int* init_table){
-  int itpos372 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction675].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos372]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11586;
-  fra.me.meth = LOCATE_parser___ReduceAction675___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11586 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction675____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos372] = 1;
-  return;
-}
-void parser___ReduceAction676___action(val_t p0, val_t p1){
+void parser___ReduceAction717___action(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;
-  fra.me.line = 11590;
-  fra.me.meth = LOCATE_parser___ReduceAction676___action;
+  fra.me.line = 12278;
+  fra.me.meth = LOCATE_parser___ReduceAction717___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 4;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
   fra.me.REG[3] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11592 */
+  /* parser/parser.nit:12280 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11593 */
-  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
-  /* ./parser//parser.nit:11595 */
+  /* parser/parser.nit:12281 */
+  fra.me.REG[3] = NEW_AImplicitSelfExpr_parser___parser_prod___AImplicitSelfExpr___init_aimplicitselfexpr();
+  /* parser/parser.nit:12282 */
   fra.me.REG[2] = fra.me.REG[3];
-  /* ./parser//parser.nit:11596 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction676____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12283 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11596);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12283);
   }
-  REGB0 = ATTR_parser___ReduceAction676____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction676___init(val_t p0, val_t p1, int* init_table){
-  int itpos373 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction676].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos373]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11599;
-  fra.me.meth = LOCATE_parser___ReduceAction676___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11599 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction676____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos373] = 1;
-  return;
-}
-void parser___ReduceAction683___action(val_t p0, val_t p1){
+void parser___ReduceAction724___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11603;
-  fra.me.meth = LOCATE_parser___ReduceAction683___action;
+  fra.me.line = 12288;
+  fra.me.meth = LOCATE_parser___ReduceAction724___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39209,13 +34345,13 @@ void parser___ReduceAction683___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11605 */
+  /* parser/parser.nit:12290 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11606 */
+  /* parser/parser.nit:12291 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11607 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11609 */
+  /* parser/parser.nit:12292 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12294 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39224,64 +34360,41 @@ void parser___ReduceAction683___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11610 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12295 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11612 */
+  /* parser/parser.nit:12297 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11613 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction683____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12298 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11613);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12298);
   }
-  REGB0 = ATTR_parser___ReduceAction683____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction683___init(val_t p0, val_t p1, int* init_table){
-  int itpos374 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction683].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos374]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11616;
-  fra.me.meth = LOCATE_parser___ReduceAction683___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11616 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction683____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos374] = 1;
-  return;
-}
-void parser___ReduceAction684___action(val_t p0, val_t p1){
+void parser___ReduceAction725___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11620;
-  fra.me.meth = LOCATE_parser___ReduceAction684___action;
+  fra.me.line = 12303;
+  fra.me.meth = LOCATE_parser___ReduceAction725___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39290,24 +34403,24 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11622 */
+  /* parser/parser.nit:12305 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11623 */
+  /* parser/parser.nit:12306 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11624 */
+  /* parser/parser.nit:12307 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11625 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11627 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12308 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12310 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11627);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12310);
   }
-  /* ./parser//parser.nit:11629 */
+  /* parser/parser.nit:12312 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11630 */
+  /* parser/parser.nit:12313 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39316,64 +34429,41 @@ void parser___ReduceAction684___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11631 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12314 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11633 */
+  /* parser/parser.nit:12316 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11634 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction684____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12317 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11634);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12317);
   }
-  REGB0 = ATTR_parser___ReduceAction684____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction684___init(val_t p0, val_t p1, int* init_table){
-  int itpos375 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction684].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos375]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11637;
-  fra.me.meth = LOCATE_parser___ReduceAction684___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11637 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction684____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos375] = 1;
-  return;
-}
-void parser___ReduceAction685___action(val_t p0, val_t p1){
+void parser___ReduceAction726___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11641;
-  fra.me.meth = LOCATE_parser___ReduceAction685___action;
+  fra.me.line = 12322;
+  fra.me.meth = LOCATE_parser___ReduceAction726___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39381,13 +34471,13 @@ void parser___ReduceAction685___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11643 */
+  /* parser/parser.nit:12324 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11644 */
+  /* parser/parser.nit:12325 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11645 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11647 */
+  /* parser/parser.nit:12326 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12328 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39396,64 +34486,41 @@ void parser___ReduceAction685___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11648 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12329 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11650 */
+  /* parser/parser.nit:12331 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11651 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction685____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12332 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11651);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12332);
   }
-  REGB0 = ATTR_parser___ReduceAction685____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction685___init(val_t p0, val_t p1, int* init_table){
-  int itpos376 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction685].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos376]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11654;
-  fra.me.meth = LOCATE_parser___ReduceAction685___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11654 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction685____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos376] = 1;
-  return;
-}
-void parser___ReduceAction686___action(val_t p0, val_t p1){
+void parser___ReduceAction727___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11658;
-  fra.me.meth = LOCATE_parser___ReduceAction686___action;
+  fra.me.line = 12337;
+  fra.me.meth = LOCATE_parser___ReduceAction727___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39462,24 +34529,24 @@ void parser___ReduceAction686___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11660 */
+  /* parser/parser.nit:12339 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11661 */
+  /* parser/parser.nit:12340 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11662 */
+  /* parser/parser.nit:12341 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11663 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11665 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12342 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12344 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11665);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12344);
   }
-  /* ./parser//parser.nit:11667 */
+  /* parser/parser.nit:12346 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11668 */
+  /* parser/parser.nit:12347 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39488,64 +34555,41 @@ void parser___ReduceAction686___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11669 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12348 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11671 */
+  /* parser/parser.nit:12350 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11672 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction686____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12351 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11672);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12351);
   }
-  REGB0 = ATTR_parser___ReduceAction686____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction686___init(val_t p0, val_t p1, int* init_table){
-  int itpos377 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction686].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos377]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11675;
-  fra.me.meth = LOCATE_parser___ReduceAction686___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11675 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction686____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos377] = 1;
-  return;
-}
-void parser___ReduceAction687___action(val_t p0, val_t p1){
+void parser___ReduceAction728___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11679;
-  fra.me.meth = LOCATE_parser___ReduceAction687___action;
+  fra.me.line = 12356;
+  fra.me.meth = LOCATE_parser___ReduceAction728___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39553,13 +34597,13 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11681 */
+  /* parser/parser.nit:12358 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11682 */
+  /* parser/parser.nit:12359 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11683 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11685 */
+  /* parser/parser.nit:12360 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12362 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39568,64 +34612,41 @@ void parser___ReduceAction687___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11686 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12363 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11688 */
+  /* parser/parser.nit:12365 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11689 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction687____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12366 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11689);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12366);
   }
-  REGB0 = ATTR_parser___ReduceAction687____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction687___init(val_t p0, val_t p1, int* init_table){
-  int itpos378 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction687].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos378]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11692;
-  fra.me.meth = LOCATE_parser___ReduceAction687___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11692 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction687____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos378] = 1;
-  return;
-}
-void parser___ReduceAction688___action(val_t p0, val_t p1){
+void parser___ReduceAction729___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11696;
-  fra.me.meth = LOCATE_parser___ReduceAction688___action;
+  fra.me.line = 12371;
+  fra.me.meth = LOCATE_parser___ReduceAction729___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39634,24 +34655,24 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11698 */
+  /* parser/parser.nit:12373 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11699 */
+  /* parser/parser.nit:12374 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11700 */
+  /* parser/parser.nit:12375 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11701 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11703 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12376 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12378 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11703);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12378);
   }
-  /* ./parser//parser.nit:11705 */
+  /* parser/parser.nit:12380 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11706 */
+  /* parser/parser.nit:12381 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39660,64 +34681,41 @@ void parser___ReduceAction688___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11707 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12382 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11709 */
+  /* parser/parser.nit:12384 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11710 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction688____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12385 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11710);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12385);
   }
-  REGB0 = ATTR_parser___ReduceAction688____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction688___init(val_t p0, val_t p1, int* init_table){
-  int itpos379 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction688].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos379]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11713;
-  fra.me.meth = LOCATE_parser___ReduceAction688___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11713 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction688____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos379] = 1;
-  return;
-}
-void parser___ReduceAction689___action(val_t p0, val_t p1){
+void parser___ReduceAction730___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11717;
-  fra.me.meth = LOCATE_parser___ReduceAction689___action;
+  fra.me.line = 12390;
+  fra.me.meth = LOCATE_parser___ReduceAction730___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39725,13 +34723,13 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11719 */
+  /* parser/parser.nit:12392 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11720 */
+  /* parser/parser.nit:12393 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11721 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11723 */
+  /* parser/parser.nit:12394 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12396 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39740,64 +34738,41 @@ void parser___ReduceAction689___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11724 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12397 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11726 */
+  /* parser/parser.nit:12399 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11727 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction689____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12400 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11727);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12400);
   }
-  REGB0 = ATTR_parser___ReduceAction689____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction689___init(val_t p0, val_t p1, int* init_table){
-  int itpos380 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction689].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos380]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11730;
-  fra.me.meth = LOCATE_parser___ReduceAction689___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11730 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction689____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos380] = 1;
-  return;
-}
-void parser___ReduceAction690___action(val_t p0, val_t p1){
+void parser___ReduceAction731___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11734;
-  fra.me.meth = LOCATE_parser___ReduceAction690___action;
+  fra.me.line = 12405;
+  fra.me.meth = LOCATE_parser___ReduceAction731___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39806,24 +34781,24 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11736 */
+  /* parser/parser.nit:12407 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11737 */
+  /* parser/parser.nit:12408 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11738 */
+  /* parser/parser.nit:12409 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11739 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11741 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12410 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12412 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11741);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12412);
   }
-  /* ./parser//parser.nit:11743 */
+  /* parser/parser.nit:12414 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11744 */
+  /* parser/parser.nit:12415 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39832,64 +34807,41 @@ void parser___ReduceAction690___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11745 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12416 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11747 */
+  /* parser/parser.nit:12418 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11748 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction690____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12419 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
-  } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11748);
-  }
-  REGB0 = ATTR_parser___ReduceAction690____goto(fra.me.REG[0]);
-  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
-  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
-  stack_frame_head = fra.me.prev;
-  return;
-}
-void parser___ReduceAction690___init(val_t p0, val_t p1, int* init_table){
-  int itpos381 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction690].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos381]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11751;
-  fra.me.meth = LOCATE_parser___ReduceAction690___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11751 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction690____goto(fra.me.REG[1]) = REGB0;
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12419);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos381] = 1;
   return;
 }
-void parser___ReduceAction693___action(val_t p0, val_t p1){
+void parser___ReduceAction734___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11755;
-  fra.me.meth = LOCATE_parser___ReduceAction693___action;
+  fra.me.line = 12424;
+  fra.me.meth = LOCATE_parser___ReduceAction734___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39897,13 +34849,13 @@ void parser___ReduceAction693___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11757 */
+  /* parser/parser.nit:12426 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11758 */
+  /* parser/parser.nit:12427 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11759 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11761 */
+  /* parser/parser.nit:12428 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12430 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -39912,64 +34864,41 @@ void parser___ReduceAction693___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11762 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12431 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11764 */
+  /* parser/parser.nit:12433 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11765 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction693____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12434 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11765);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12434);
   }
-  REGB0 = ATTR_parser___ReduceAction693____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction693___init(val_t p0, val_t p1, int* init_table){
-  int itpos382 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction693].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos382]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11768;
-  fra.me.meth = LOCATE_parser___ReduceAction693___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11768 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction693____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos382] = 1;
-  return;
-}
-void parser___ReduceAction694___action(val_t p0, val_t p1){
+void parser___ReduceAction735___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11772;
-  fra.me.meth = LOCATE_parser___ReduceAction694___action;
+  fra.me.line = 12439;
+  fra.me.meth = LOCATE_parser___ReduceAction735___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -39978,24 +34907,24 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11774 */
+  /* parser/parser.nit:12441 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11775 */
+  /* parser/parser.nit:12442 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11776 */
+  /* parser/parser.nit:12443 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11777 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11779 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12444 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12446 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11779);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12446);
   }
-  /* ./parser//parser.nit:11781 */
+  /* parser/parser.nit:12448 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11782 */
+  /* parser/parser.nit:12449 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40004,64 +34933,41 @@ void parser___ReduceAction694___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11783 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12450 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11785 */
+  /* parser/parser.nit:12452 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11786 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction694____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12453 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11786);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12453);
   }
-  REGB0 = ATTR_parser___ReduceAction694____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction694___init(val_t p0, val_t p1, int* init_table){
-  int itpos383 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction694].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos383]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11789;
-  fra.me.meth = LOCATE_parser___ReduceAction694___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11789 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction694____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos383] = 1;
-  return;
-}
-void parser___ReduceAction695___action(val_t p0, val_t p1){
+void parser___ReduceAction736___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11793;
-  fra.me.meth = LOCATE_parser___ReduceAction695___action;
+  fra.me.line = 12458;
+  fra.me.meth = LOCATE_parser___ReduceAction736___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40069,13 +34975,13 @@ void parser___ReduceAction695___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11795 */
+  /* parser/parser.nit:12460 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11796 */
+  /* parser/parser.nit:12461 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11797 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11799 */
+  /* parser/parser.nit:12462 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12464 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40084,64 +34990,41 @@ void parser___ReduceAction695___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11800 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12465 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11802 */
+  /* parser/parser.nit:12467 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11803 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction695____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12468 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11803);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12468);
   }
-  REGB0 = ATTR_parser___ReduceAction695____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction695___init(val_t p0, val_t p1, int* init_table){
-  int itpos384 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction695].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos384]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11806;
-  fra.me.meth = LOCATE_parser___ReduceAction695___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11806 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction695____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos384] = 1;
-  return;
-}
-void parser___ReduceAction696___action(val_t p0, val_t p1){
+void parser___ReduceAction737___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11810;
-  fra.me.meth = LOCATE_parser___ReduceAction696___action;
+  fra.me.line = 12473;
+  fra.me.meth = LOCATE_parser___ReduceAction737___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40150,24 +35033,24 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11812 */
+  /* parser/parser.nit:12475 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11813 */
+  /* parser/parser.nit:12476 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11814 */
+  /* parser/parser.nit:12477 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11815 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11817 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12478 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12480 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11817);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12480);
   }
-  /* ./parser//parser.nit:11819 */
+  /* parser/parser.nit:12482 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11820 */
+  /* parser/parser.nit:12483 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40176,64 +35059,41 @@ void parser___ReduceAction696___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11821 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12484 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11823 */
+  /* parser/parser.nit:12486 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11824 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction696____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12487 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11824);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12487);
   }
-  REGB0 = ATTR_parser___ReduceAction696____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction696___init(val_t p0, val_t p1, int* init_table){
-  int itpos385 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction696].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos385]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11827;
-  fra.me.meth = LOCATE_parser___ReduceAction696___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11827 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction696____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos385] = 1;
-  return;
-}
-void parser___ReduceAction697___action(val_t p0, val_t p1){
+void parser___ReduceAction738___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11831;
-  fra.me.meth = LOCATE_parser___ReduceAction697___action;
+  fra.me.line = 12492;
+  fra.me.meth = LOCATE_parser___ReduceAction738___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40241,13 +35101,13 @@ void parser___ReduceAction697___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11833 */
+  /* parser/parser.nit:12494 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11834 */
+  /* parser/parser.nit:12495 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11835 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11837 */
+  /* parser/parser.nit:12496 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12498 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40256,64 +35116,41 @@ void parser___ReduceAction697___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11838 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12499 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11840 */
+  /* parser/parser.nit:12501 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11841 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction697____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12502 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11841);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12502);
   }
-  REGB0 = ATTR_parser___ReduceAction697____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction697___init(val_t p0, val_t p1, int* init_table){
-  int itpos386 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction697].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos386]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11844;
-  fra.me.meth = LOCATE_parser___ReduceAction697___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11844 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction697____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos386] = 1;
-  return;
-}
-void parser___ReduceAction698___action(val_t p0, val_t p1){
+void parser___ReduceAction739___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11848;
-  fra.me.meth = LOCATE_parser___ReduceAction698___action;
+  fra.me.line = 12507;
+  fra.me.meth = LOCATE_parser___ReduceAction739___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40322,24 +35159,24 @@ void parser___ReduceAction698___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11850 */
+  /* parser/parser.nit:12509 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11851 */
+  /* parser/parser.nit:12510 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11852 */
+  /* parser/parser.nit:12511 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11853 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11855 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12512 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12514 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11855);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12514);
   }
-  /* ./parser//parser.nit:11857 */
+  /* parser/parser.nit:12516 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11858 */
+  /* parser/parser.nit:12517 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40348,64 +35185,41 @@ void parser___ReduceAction698___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11859 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12518 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11861 */
+  /* parser/parser.nit:12520 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11862 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction698____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12521 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11862);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12521);
   }
-  REGB0 = ATTR_parser___ReduceAction698____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction698___init(val_t p0, val_t p1, int* init_table){
-  int itpos387 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction698].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos387]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11865;
-  fra.me.meth = LOCATE_parser___ReduceAction698___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11865 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction698____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos387] = 1;
-  return;
-}
-void parser___ReduceAction699___action(val_t p0, val_t p1){
+void parser___ReduceAction740___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11869;
-  fra.me.meth = LOCATE_parser___ReduceAction699___action;
+  fra.me.line = 12526;
+  fra.me.meth = LOCATE_parser___ReduceAction740___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40413,13 +35227,13 @@ void parser___ReduceAction699___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11871 */
+  /* parser/parser.nit:12528 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11872 */
+  /* parser/parser.nit:12529 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11873 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11875 */
+  /* parser/parser.nit:12530 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12532 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40428,64 +35242,41 @@ void parser___ReduceAction699___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11876 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12533 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11878 */
+  /* parser/parser.nit:12535 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:11879 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction699____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12536 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11879);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12536);
   }
-  REGB0 = ATTR_parser___ReduceAction699____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction699___init(val_t p0, val_t p1, int* init_table){
-  int itpos388 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction699].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos388]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11882;
-  fra.me.meth = LOCATE_parser___ReduceAction699___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11882 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction699____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos388] = 1;
-  return;
-}
-void parser___ReduceAction700___action(val_t p0, val_t p1){
+void parser___ReduceAction741___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11886;
-  fra.me.meth = LOCATE_parser___ReduceAction700___action;
+  fra.me.line = 12541;
+  fra.me.meth = LOCATE_parser___ReduceAction741___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40494,24 +35285,24 @@ void parser___ReduceAction700___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11888 */
+  /* parser/parser.nit:12543 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11889 */
+  /* parser/parser.nit:12544 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11890 */
+  /* parser/parser.nit:12545 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11891 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11893 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12546 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12548 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11893);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12548);
   }
-  /* ./parser//parser.nit:11895 */
+  /* parser/parser.nit:12550 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11896 */
+  /* parser/parser.nit:12551 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40520,64 +35311,41 @@ void parser___ReduceAction700___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11897 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12552 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11899 */
+  /* parser/parser.nit:12554 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11900 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction700____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12555 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11900);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12555);
   }
-  REGB0 = ATTR_parser___ReduceAction700____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction700___init(val_t p0, val_t p1, int* init_table){
-  int itpos389 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction700].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos389]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11903;
-  fra.me.meth = LOCATE_parser___ReduceAction700___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11903 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction700____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos389] = 1;
-  return;
-}
-void parser___ReduceAction702___action(val_t p0, val_t p1){
+void parser___ReduceAction743___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11907;
-  fra.me.meth = LOCATE_parser___ReduceAction702___action;
+  fra.me.line = 12560;
+  fra.me.meth = LOCATE_parser___ReduceAction743___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40586,24 +35354,24 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11909 */
+  /* parser/parser.nit:12562 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11910 */
+  /* parser/parser.nit:12563 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11911 */
+  /* parser/parser.nit:12564 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11912 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11914 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12565 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12567 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11914);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12567);
   }
-  /* ./parser//parser.nit:11916 */
+  /* parser/parser.nit:12569 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11917 */
+  /* parser/parser.nit:12570 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40612,64 +35380,98 @@ void parser___ReduceAction702___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11918 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12571 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11920 */
+  /* parser/parser.nit:12573 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11921 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction702____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12574 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11921);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12574);
   }
-  REGB0 = ATTR_parser___ReduceAction702____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction702___init(val_t p0, val_t p1, int* init_table){
-  int itpos390 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction702].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
+void parser___ReduceAction744___action(val_t p0, val_t p1){
+  struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
+  val_t REGB1;
   val_t tmp;
-  if (init_table[itpos390]) return;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11924;
-  fra.me.meth = LOCATE_parser___ReduceAction702___init;
+  fra.me.line = 12579;
+  fra.me.meth = LOCATE_parser___ReduceAction744___action;
   fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
+  fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
+  fra.me.REG[2] = NIT_NULL;
+  fra.me.REG[3] = NIT_NULL;
+  fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11924 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction702____goto(fra.me.REG[1]) = REGB0;
+  fra.me.REG[1] = p1;
+  /* parser/parser.nit:12581 */
+  fra.me.REG[2] = NIT_NULL;
+  /* parser/parser.nit:12582 */
+  fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
+  /* parser/parser.nit:12583 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12585 */
+  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_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB0 = REGB1;
+    }
+  }
+  REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
+  if (UNTAG_Bool(REGB0)) {
+    /* parser/parser.nit:12586 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+  }
+  /* parser/parser.nit:12588 */
+  fra.me.REG[2] = fra.me.REG[4];
+  /* parser/parser.nit:12589 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
+  if (UNTAG_Bool(REGB0)) {
+  } else {
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12589);
+  }
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
+  REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
+  CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
-  init_table[itpos390] = 1;
   return;
 }
-void parser___ReduceAction704___action(val_t p0, val_t p1){
+void parser___ReduceAction745___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11928;
-  fra.me.meth = LOCATE_parser___ReduceAction704___action;
+  fra.me.line = 12594;
+  fra.me.meth = LOCATE_parser___ReduceAction745___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40678,24 +35480,24 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11930 */
+  /* parser/parser.nit:12596 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11931 */
+  /* parser/parser.nit:12597 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11932 */
+  /* parser/parser.nit:12598 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11933 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11935 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12599 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12601 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11935);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12601);
   }
-  /* ./parser//parser.nit:11937 */
+  /* parser/parser.nit:12603 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11938 */
+  /* parser/parser.nit:12604 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40704,63 +35506,40 @@ void parser___ReduceAction704___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11939 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12605 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11941 */
+  /* parser/parser.nit:12607 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11942 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction704____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12608 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11942);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12608);
   }
-  REGB0 = ATTR_parser___ReduceAction704____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction704___init(val_t p0, val_t p1, int* init_table){
-  int itpos391 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction704].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos391]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11945;
-  fra.me.meth = LOCATE_parser___ReduceAction704___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11945 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction704____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos391] = 1;
-  return;
-}
-void parser___ReduceAction706___action(val_t p0, val_t p1){
+void parser___ReduceAction747___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11949;
-  fra.me.meth = LOCATE_parser___ReduceAction706___action;
+  fra.me.line = 12613;
+  fra.me.meth = LOCATE_parser___ReduceAction747___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40769,81 +35548,58 @@ void parser___ReduceAction706___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11951 */
+  /* parser/parser.nit:12615 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11952 */
+  /* parser/parser.nit:12616 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11953 */
+  /* parser/parser.nit:12617 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11954 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11956 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12618 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12620 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11956);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12620);
   }
-  /* ./parser//parser.nit:11958 */
-  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12622 */
+  REGB0 = TAG_Bool((fra.me.REG[3]!=NIT_NULL) && VAL_ISA(fra.me.REG[3], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11958);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12622);
   }
-  /* ./parser//parser.nit:11959 */
+  /* parser/parser.nit:12623 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11960 */
+  /* parser/parser.nit:12624 */
   fra.me.REG[3] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[3]);
   fra.me.REG[5] = fra.me.REG[3];
-  /* ./parser//parser.nit:11961 */
+  /* parser/parser.nit:12625 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11962 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction706____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12626 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11962);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12626);
   }
-  REGB0 = ATTR_parser___ReduceAction706____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction706___init(val_t p0, val_t p1, int* init_table){
-  int itpos392 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction706].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos392]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11965;
-  fra.me.meth = LOCATE_parser___ReduceAction706___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11965 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction706____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos392] = 1;
-  return;
-}
-void parser___ReduceAction710___action(val_t p0, val_t p1){
+void parser___ReduceAction751___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11969;
-  fra.me.meth = LOCATE_parser___ReduceAction710___action;
+  fra.me.line = 12631;
+  fra.me.meth = LOCATE_parser___ReduceAction751___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40852,24 +35608,24 @@ void parser___ReduceAction710___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11971 */
+  /* parser/parser.nit:12633 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11972 */
+  /* parser/parser.nit:12634 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11973 */
+  /* parser/parser.nit:12635 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11974 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11976 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12636 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12638 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 11976);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12638);
   }
-  /* ./parser//parser.nit:11978 */
+  /* parser/parser.nit:12640 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:11979 */
+  /* parser/parser.nit:12641 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40878,64 +35634,41 @@ void parser___ReduceAction710___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11980 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12642 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11982 */
+  /* parser/parser.nit:12644 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:11983 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction710____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12645 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 11983);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12645);
   }
-  REGB0 = ATTR_parser___ReduceAction710____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction710___init(val_t p0, val_t p1, int* init_table){
-  int itpos393 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction710].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos393]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 11986;
-  fra.me.meth = LOCATE_parser___ReduceAction710___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:11986 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction710____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos393] = 1;
-  return;
-}
-void parser___ReduceAction711___action(val_t p0, val_t p1){
+void parser___ReduceAction752___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 11990;
-  fra.me.meth = LOCATE_parser___ReduceAction711___action;
+  fra.me.line = 12650;
+  fra.me.meth = LOCATE_parser___ReduceAction752___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -40943,13 +35676,13 @@ void parser___ReduceAction711___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:11992 */
+  /* parser/parser.nit:12652 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:11993 */
+  /* parser/parser.nit:12653 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:11994 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:11996 */
+  /* parser/parser.nit:12654 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12656 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -40958,64 +35691,41 @@ void parser___ReduceAction711___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:11997 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12657 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:11999 */
+  /* parser/parser.nit:12659 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:12000 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction711____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12660 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12000);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12660);
   }
-  REGB0 = ATTR_parser___ReduceAction711____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction711___init(val_t p0, val_t p1, int* init_table){
-  int itpos394 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction711].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos394]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12003;
-  fra.me.meth = LOCATE_parser___ReduceAction711___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:12003 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction711____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos394] = 1;
-  return;
-}
-void parser___ReduceAction712___action(val_t p0, val_t p1){
+void parser___ReduceAction753___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12007;
-  fra.me.meth = LOCATE_parser___ReduceAction712___action;
+  fra.me.line = 12665;
+  fra.me.meth = LOCATE_parser___ReduceAction753___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41024,24 +35734,24 @@ void parser___ReduceAction712___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:12009 */
+  /* parser/parser.nit:12667 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:12010 */
+  /* parser/parser.nit:12668 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12011 */
+  /* parser/parser.nit:12669 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12012 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:12014 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12670 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12672 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12014);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12672);
   }
-  /* ./parser//parser.nit:12016 */
+  /* parser/parser.nit:12674 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:12017 */
+  /* parser/parser.nit:12675 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41050,64 +35760,41 @@ void parser___ReduceAction712___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12018 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12676 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12020 */
+  /* parser/parser.nit:12678 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:12021 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction712____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12679 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12021);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12679);
   }
-  REGB0 = ATTR_parser___ReduceAction712____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction712___init(val_t p0, val_t p1, int* init_table){
-  int itpos395 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction712].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos395]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12024;
-  fra.me.meth = LOCATE_parser___ReduceAction712___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:12024 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction712____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos395] = 1;
-  return;
-}
-void parser___ReduceAction713___action(val_t p0, val_t p1){
+void parser___ReduceAction754___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[4];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12028;
-  fra.me.meth = LOCATE_parser___ReduceAction713___action;
+  fra.me.line = 12684;
+  fra.me.meth = LOCATE_parser___ReduceAction754___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 5;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41115,13 +35802,13 @@ void parser___ReduceAction713___action(val_t p0, val_t p1){
   fra.me.REG[4] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:12030 */
+  /* parser/parser.nit:12686 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:12031 */
+  /* parser/parser.nit:12687 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12032 */
-  fra.me.REG[4] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:12034 */
+  /* parser/parser.nit:12688 */
+  fra.me.REG[4] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12690 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41130,64 +35817,41 @@ void parser___ReduceAction713___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12035 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
+    /* parser/parser.nit:12691 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[4])(fra.me.REG[4], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12037 */
+  /* parser/parser.nit:12693 */
   fra.me.REG[2] = fra.me.REG[4];
-  /* ./parser//parser.nit:12038 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction713____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12694 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12038);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12694);
   }
-  REGB0 = ATTR_parser___ReduceAction713____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction713___init(val_t p0, val_t p1, int* init_table){
-  int itpos396 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction713].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos396]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12041;
-  fra.me.meth = LOCATE_parser___ReduceAction713___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:12041 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction713____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos396] = 1;
-  return;
-}
-void parser___ReduceAction714___action(val_t p0, val_t p1){
+void parser___ReduceAction755___action(val_t p0, val_t p1){
   struct {struct stack_frame_t me; val_t MORE_REG[5];} fra;
   val_t REGB0;
   val_t REGB1;
   val_t tmp;
   fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
   fra.me.file = LOCATE_parser;
-  fra.me.line = 12045;
-  fra.me.meth = LOCATE_parser___ReduceAction714___action;
+  fra.me.line = 12699;
+  fra.me.meth = LOCATE_parser___ReduceAction755___action;
   fra.me.has_broke = 0;
   fra.me.REG_size = 6;
+  fra.me.nitni_local_ref_head = NULL;
   fra.me.REG[0] = NIT_NULL;
   fra.me.REG[1] = NIT_NULL;
   fra.me.REG[2] = NIT_NULL;
@@ -41196,24 +35860,24 @@ void parser___ReduceAction714___action(val_t p0, val_t p1){
   fra.me.REG[5] = NIT_NULL;
   fra.me.REG[0] = p0;
   fra.me.REG[1] = p1;
-  /* ./parser//parser.nit:12047 */
+  /* parser/parser.nit:12701 */
   fra.me.REG[2] = NIT_NULL;
-  /* ./parser//parser.nit:12048 */
+  /* parser/parser.nit:12702 */
   fra.me.REG[3] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12049 */
+  /* parser/parser.nit:12703 */
   fra.me.REG[4] = CALL_parser___Parser___pop(fra.me.REG[1])(fra.me.REG[1]);
-  /* ./parser//parser.nit:12050 */
-  fra.me.REG[5] = NEW_Array_array___Array___init();
-  /* ./parser//parser.nit:12052 */
-  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_Array, ID_Array)) /*cast Array[Object]*/;
+  /* parser/parser.nit:12704 */
+  fra.me.REG[5] = NEW_Array_standard___collection___array___Array___init();
+  /* parser/parser.nit:12706 */
+  REGB0 = TAG_Bool((fra.me.REG[4]!=NIT_NULL) && VAL_ISA(fra.me.REG[4], COLOR_standard___collection___array___Array, ID_standard___collection___array___Array)) /*cast Array[Object]*/;
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Assert failed", NULL, LOCATE_parser, 12052);
+    nit_abort("Assert failed", NULL, LOCATE_parser, 12706);
   }
-  /* ./parser//parser.nit:12054 */
+  /* parser/parser.nit:12708 */
   fra.me.REG[4] = CALL_parser___ReduceAction___concat(fra.me.REG[0])(fra.me.REG[0], fra.me.REG[5], fra.me.REG[4]);
   fra.me.REG[5] = fra.me.REG[4];
-  /* ./parser//parser.nit:12055 */
+  /* parser/parser.nit:12709 */
   REGB0 = TAG_Bool(fra.me.REG[3]==NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
@@ -41222,50 +35886,26 @@ void parser___ReduceAction714___action(val_t p0, val_t p1){
       REGB1 = TAG_Bool(false);
       REGB0 = REGB1;
     } else {
-      REGB1 = CALL_kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
+      REGB1 = CALL_standard___kernel___Object_____eqeq(fra.me.REG[3])(fra.me.REG[3], NIT_NULL);
       REGB0 = REGB1;
     }
   }
   REGB0 = TAG_Bool(!UNTAG_Bool(REGB0));
   if (UNTAG_Bool(REGB0)) {
-    /* ./parser//parser.nit:12056 */
-    CALL_abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
+    /* parser/parser.nit:12710 */
+    CALL_standard___collection___abstract_collection___SimpleCollection___add(fra.me.REG[5])(fra.me.REG[5], fra.me.REG[3]);
   }
-  /* ./parser//parser.nit:12058 */
+  /* parser/parser.nit:12712 */
   fra.me.REG[2] = fra.me.REG[5];
-  /* ./parser//parser.nit:12059 */
-  REGB0 = TAG_Bool(ATTR_parser___ReduceAction714____goto(fra.me.REG[0])!=NIT_NULL);
+  /* parser/parser.nit:12713 */
+  REGB0 = TAG_Bool(ATTR_parser___ReduceAction____goto(fra.me.REG[0])!=NIT_NULL);
   if (UNTAG_Bool(REGB0)) {
   } else {
-    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12059);
+    nit_abort("Uninitialized attribute %s", "_goto", LOCATE_parser, 12713);
   }
-  REGB0 = ATTR_parser___ReduceAction714____goto(fra.me.REG[0]);
+  REGB0 = ATTR_parser___ReduceAction____goto(fra.me.REG[0]);
   REGB0 = CALL_parser___Parser___go_to(fra.me.REG[1])(fra.me.REG[1], REGB0);
   CALL_parser___Parser___push(fra.me.REG[1])(fra.me.REG[1], REGB0, fra.me.REG[2]);
   stack_frame_head = fra.me.prev;
   return;
 }
-void parser___ReduceAction714___init(val_t p0, val_t p1, int* init_table){
-  int itpos397 = VAL2OBJ(p0)->vft[INIT_TABLE_POS_ReduceAction714].i;
-  struct {struct stack_frame_t me; val_t MORE_REG[1];} fra;
-  val_t REGB0;
-  val_t tmp;
-  if (init_table[itpos397]) return;
-  fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;
-  fra.me.file = LOCATE_parser;
-  fra.me.line = 12062;
-  fra.me.meth = LOCATE_parser___ReduceAction714___init;
-  fra.me.has_broke = 0;
-  fra.me.REG_size = 2;
-  fra.me.REG[0] = NIT_NULL;
-  fra.me.REG[1] = NIT_NULL;
-  fra.me.REG[0] = p0;
-  REGB0 = p1;
-  /* ./parser//parser.nit:12062 */
-  fra.me.REG[1] = fra.me.REG[0];
-  CALL_parser___ReduceAction___init(fra.me.REG[0])(fra.me.REG[0], init_table);
-  ATTR_parser___ReduceAction714____goto(fra.me.REG[1]) = REGB0;
-  stack_frame_head = fra.me.prev;
-  init_table[itpos397] = 1;
-  return;
-}